HTTP

HTTP 協(xié)議是以 ASCII 碼傳輸,建立在 TCP/IP 協(xié)議之上的應(yīng)用層規(guī)范,規(guī)定HTTP 請求分為三個部分:

  • 狀態(tài)行
  • headers 請求頭
  • entity-body 消息主體

HTTP協(xié)議規(guī)定 POST 提交的數(shù)據(jù)必須放在消息主體(entity-body)中。

enctype 屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如何對表單數(shù)據(jù)進(jìn)行編碼。服務(wù)端通常是根據(jù)請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進(jìn)行解析。

四種常見的 POST 提交數(shù)據(jù)方式

描述
application/x-www-form-urlencoded 在發(fā)送前編碼所有字符(默認(rèn))
multipart/form-data 不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。
application/json 作為請求頭告訴服務(wù)端消息主體是序列化的JSON字符串。除低版本的IE,基本都支持。
text/plain 空格轉(zhuǎn)換為 “+” 加號,但不對特殊字符編碼。
  • 瀏覽器的原生 <form>表單,如果不設(shè)置 enctype 屬性,那么最終就會以 application/x-www-form-urlencoded 方式提交數(shù)據(jù)。如
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 設(shè)為 multipart/form-data。

  • application/json作為請求頭,用來告訴服務(wù)端消息主體是序列化的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 作為傳輸協(xié)議,XML 作為編碼方式的遠(yuǎn)程調(diào)用規(guī)范。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>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容