再次回顾post请求中的enctype

Posted toDoYourBest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再次回顾post请求中的enctype相关的知识,希望对你有一定的参考价值。

1,关于multipart/form-data,参考rfc1867

2.关于post的集中编码格式,参考MDN

A brief introduction to the submit methods

An html <form> can be sent in four ways:

  • using the POST method and setting the enctype attribute to application/x-www-form-urlencoded (default);
  • using the POST method and setting the enctype attribute to text/plain;
  • using the POST method and setting the enctype attribute to multipart/form-data;
  • using the GET method (in this case the enctype attribute will be ignored).

Now, consider the submission of a form containing only two fields, named foo and baz. If you are using the POST method the server will receive a string similar to one of the following three examples, depending on the encoding type you are using:

  • Method: POST; Encoding type: application/x-www-form-urlencoded (default):

    Content-Type: application/x-www-form-urlencoded
    
    foo=bar&baz=The+first+line.%0D%0AThe+second+line.%0D%0A
  • Method: POST; Encoding type: text/plain:

    Content-Type: text/plain
    
    foo=bar
    baz=The first line.
    The second line.
  • Method: POST; Encoding type: multipart/form-data:(上传文件会用到)

    Content-Type: multipart/form-data; boundary=---------------------------314911788813839
    
    -----------------------------314911788813839
    Content-Disposition: form-data; name="foo"
    
    bar
    -----------------------------314911788813839
    Content-Disposition: form-data; name="baz"
    
    The first line.
    The second line.
    
    -----------------------------314911788813839--

However, if you are using the GET method, a string like the following will be simply added to the URL:

?foo=bar&baz=The%20first%20line.%0AThe%20second%20line.

关于multipart/form-data有个小插曲,就是在使用Jquery 的Formdata对象进行ajax上传文件时,ajax有个content-type的设置,默认是application/x-www-form-urlencoded,但是,如果上传文件,必须使用multipart/form-data,
而且必须设定分隔符,所以,此项不需要设置(值为false),然后通过HTML表单创建FormData对象即可(var formData = new FormData(someFormElement))
关于


 

multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。具体的头信息如下:

[html] view plain copy
 
  1. Content-Type: multipart/form-data; boundary=${bound}     

以上是关于再次回顾post请求中的enctype的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET 中的代码隐藏提交 POST 请求 [重复]

存储$ _GET并在POST请求中再次使用它

如何将 enctype 属性添加到 FormData() 对象?

python上传图片头像。一个post 提交不知道怎么写?这样的

HTTP 请求头中的Content-Type类型

Python爬虫杂记 - POST之multipart/form-data请求