天天看点

浅谈HTTP的Content-Type

Content-Type,内容类型,用于定义文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。

文件扩展名和Content-Type往往有一定的对应关系,如:

① .js:application/javascript

② .css:text/css

③ .xml:text/xml

④ .txt:text/plain

HTTP Header里的Content-Type一般有3种:

① application/x-www-form-urlencoded:标准的编码格式,数据被编码为名称/值对。

② multipart/form-data: 数据被编码为一条消息,每个控件对应消息中的一个部分。

③ text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,不含任何控件或格式字符。

form的enctype属性为编码方式,常用有:application/x-www-form-urlencoded(默认)、multipart/form-data和application/json。

① application/x-www-form-urlencoded是常用的表单发包方式,普通的表单提交或js发包,默认都是通过这种方式。

<form action="" enctype="application/x-www-form-urlencoded"></form>
           

② multipart/form-data用在post方式的文件发包。

<form action="" enctype="multipart/form-data"></form>
           

③ application/json提交的数据是 JSON格式的字符串。

<form action="" enctype="application/json"></form>
           

当action为get时,x-www-form-urlencoded的编码方式把form数据转换成一个字串(prop1=value1&prop2=value2...),追加到url后面,用?分割。

当action为post时,浏览器把form数据封装到http body中,发送到服务器。若表单中没有type=file的控件,用默认的application/x-www-form-urlencoded即可;但若有type=file的控件,就要用到multipart/form-data。当action为post且Content-Type是multipart/form-data,浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary),如:Content-Type:multipart/form-data; boundary=------WebKitFormBoundaryOGkWPJsSaJCPWjZP