HTTP

HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范,规定HTTP 请求分为三个部分:

  • 状态行
  • headers 请求头
  • entity-body 消息主体

HTTP协议规定 POST 提交的数据必须放在消息主体(entity-body)中。

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。

四种常见的 POST 提交数据方式

描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
application/json 作为请求头告诉服务端消息主体是序列化的JSON字符串。除低版本的IE,基本都支持。
text/plain 空格转换为 “+” 加号,但不对特殊字符编码。
  • 浏览器的原生 <form>表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。如
POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
 
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
  • 我们使用表单上传文件时,必须将 enctype 设为 multipart/form-data。

  • application/json作为请求头,用来告诉服务端消息主体是序列化的JSON字符串。如

BASHPOST http://www.example.com HTTP/1.1 
Content-Type: application/json;charset=utf-8

{"title":"test","sub":[1,2,3]}
  • text/xml,一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。XML-RPC(XML Remote Procedure Call),如
POST http://www.example.com HTTP/1.1 
Content-Type: text/xml

<?xml version="1.0"?>
<methodCall>
    <methodName>examples.getStateName</methodName>
    <params>
        <param>
            <value><i4>41</i4></value>
        </param>
    </params>
</methodCall>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容