在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 下边是说明: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
引用
The MIME types you mention are the two Content-Type headers for HTTP POST requests that user-agents (browsers) must support. The purpose of both of those types of requests is to send a list of name/value pairs to the server. Depending on the type and amount of data being transmitted, one of the methods will be more efficient than the other. To understand why, you have to look at what each is doing under the covers.
For application/x-www-form-urlencoded, the body of the HTTP message sent to the server is essentially one giant query string -- name/value pairs are separated by the ampersand (&), and names are separated from values by the equal symbal (=). An example of this would be:
MyVariableOne=ValueOne&MyVariableTwo=ValueTwo
According to the specification:
[Reserved and] non-alphanumeric characters are replaced by `%HH', a percent sign and two hexadecimal digits representing the ASCII code of the character
That means that for each non-alphanumeric byte that exists in one of our values, it's going to take three bytes to represent it. For large binary files, tripling the payload is going to be highly inefficient.
That's where multipart/form-data comes in. With this method of transmitting name/value pairs, each pair is represented as a "part" in a MIME message (as described by other answers). Parts are separated by a particular string boundary (chosen specifically so that this boundary string does not occur in any of the "value" payloads). Each part has its own set of MIME headers like Content-Type, and particularly Content-Disposition, which can give each part its "name." The value piece of each name/value pair is the payload of each part of the MIME message. The MIME spec gives us more options when representing the value payload -- we can choose a more efficient encoding of binary data to save bandwidth (e.g. base 64 or even raw binary).
Why not use multipart/form-data all the time? For short alphanumeric values (like most web forms), the overhead of adding all of the MIME headers is going to significantly outweigh any savings from more efficient binary encoding.
The moral of the story is, if you have binary (non-alphanumeric) data (or a significantly sized payload) to transmit, use multipart/form-data. Otherwise, use application/x-www-form-urlencoded.
参考:
http://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
分享到:
相关推荐
关于application/x-www-form-urlencoded等字符编码的解释说明 application/x-www-form-urlencoded是HTML表单提交时使用的最常见的编码格式,它将窗体数据编码为名称/值对。这种编码格式是标准的编码格式,广泛应用...
在Web开发中,当涉及到通过HTTP协议向服务器发送POST请求时,我们经常需要选择不同的数据编码类型,主要是`application/x-www-form-urlencoded`和`multipart/form-data`。这两种编码方式各有其适用场景,主要取决于...
在Web开发中,Ajax(Asynchronous JavaScript and XML)技术常用于实现页面的异步更新,但处理中文字符时,由于编码不一致,可能会出现乱码问题。本文将针对标题和描述中提到的Ajax中文乱码问题,提供几种常见的解决...
在发送HTTP请求时,尤其是POST请求,表单数据通常需要被序列化成URL编码格式(application/x-www-form-urlencoded)。URL编码是一种标准的编码方式,将非ASCII字符转换为ASCII字符,并在每个字符前加上百分号%以表示...
1. **设置请求头编码**:在发送Ajax请求时,确保设置Content-Type为`application/x-www-form-urlencoded; charset=UTF-8`,例如: ```javascript j$.ajax({ type: "get", url: "add_form_do.jsp", contentType...
总的来说,解决Ajax请求中传输中文乱码问题的关键在于理解字符编码的流程,并在客户端、服务器端以及数据存储环节保持一致。通过正确设置编码、解码函数,以及相应环境的配置,可以有效地避免中文乱码的出现。对于...
在上面的例子中,我们将 `contentType` 属性设置为 `application/x-www-form-urlencoded`,这将告诉服务器期望接收 URL 编码的数据。 表单数据传输 如果 Ajax 请求需要将一个表单中的数据传输到后台,那么需要使用...
2. 修改HTTP请求的"Content-Type":通过设置axios的默认请求头中的"Content-Type"为"application/x-www-form-urlencoded",让axios知道我们希望发送的是URL编码后的表单数据。 3. 使用qs库进行数据格式转换:虽然...
1. **修改Ajax配置**:在Jquery的Ajax方法调用中,添加`contentType`参数,并将其值设置为`"application/x-www-form-urlencoded;charset=utf-8"`。 ```javascript jQuery(form).ajaxSubmit({ url: "ajaxsub....
如果是表单数据,则通常使用`application/x-www-form-urlencoded`。 ### 5. 结论 理解并正确使用`Content-Type`对于确保Web应用的正常运行至关重要。它不仅影响数据的正确解析,还关系到浏览器如何处理接收到的...
所以 form 表单提交 和 $.ajax 都是默认 application/x-www-form-urlencoded 请求长这个样子 curl 'http://192.168.11.88:8080/r_server_manager/api/open/user/vo' -H 'Connection: keep-alive' -H 'Prag
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); ``` 2. **修改服务器端的配置**: - **使用`request.setCharacterEncoding()`方法**:在服务器端接收请求前,可以...
在使用AJAX技术进行前后端数据交互时,经常会出现中文字符编码的问题,尤其是在使用`XMLHttpRequest`对象发送请求的过程中。例如,在Internet Explorer(IE)浏览器与Mozilla Firefox浏览器之间存在不同的行为表现,...
在jQuery的`$.ajax`或`$.post`方法中,默认的`contentType`是`application/x-www-form-urlencoded`,但没有指定字符集,这会导致数据以ISO-8859-1编码发送,不支持中文字符。要解决这个问题,我们需要在Ajax请求中...
1. 设置请求头编码:在发送Ajax请求时,可以设置`contentType`为`'application/x-www-form-urlencoded; charset=UTF-8'`,确保数据以UTF-8编码发送。 ```javascript $.ajax({ url: 'your-url', type: 'GET', ...
2. **设置HTTP头**:在发起Ajax请求时,通过`XMLHttpRequest`对象的`setRequestHeader()`方法设置正确的HTTP头,如`"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"`,确保请求体中的中文字符以...
在上面的代码中,我们检查了请求的`contentType`,如果它是`application/x-www-form-urlencoded`,则会对数据进行URL编码,以防止乱码的出现。 接下来,我们来看看jQuery的`AjaxForm`插件。这个插件使得表单的Ajax...
在Chrome开发者工具中,这类请求的`Content-Type`可能是`application/json`、`multipart/form-data`或其他自定义类型,而非`application/x-www-form-urlencoded`。 - 在`request payload`中,数据结构更灵活,可以...
默认情况下,`$.ajax`会将数据转换为URL编码的查询字符串("application/x-www-form-urlencoded")。但如果我们设置`contentType: "application/json; charset=utf-8"`,则表明我们将发送JSON格式的数据,并且字符集...
form表单的enctype属性:...1、enctype="application/x-www-form-urlencoded"(默认) 说明:代表当前表单只能提交字符信息 2、enctype="multipart/form-data" 说明:代表当前表单不仅能提交字符信息也可以提交字节信息