POST
HTTP POST
方法將數據發送到服務器。請求主體的類型由 Content-Type
標頭指示。
PUT
和 POST
之間的區別在於 PUT
是幂等的:調用一次或多次連續調用具有相同效果(即沒有副作用),而連續相同的 POST
可能會產生額外的效果,例如多次提交訂單。
POST
請求通常通過 HTML 表單發送,並導致服務器上的更改。在這種情況下,通過將適當的字串放入 <form>
元素的 enctype
屬性或 <input>
或 <button>
元素的 formenctype
屬性來選擇內容類型:
application/x-www-form-urlencoded
:鍵和值以'&'
分隔的鍵值元組形式進行編碼,鍵和值之間有'='
。鍵和值中的非字母數字符號均已 URL 編碼:這就是為什麼此類型不適用於二進制數據(請改用multipart/form-data
)。multipart/form-data
:每個值都作為一個數據塊("主體部分")發送,由用戶代理定義的分隔符("邊界")分隔每個部分。鍵在每個部分的Content-Disposition
標頭中給出。text/plain
當 POST
請求通過 HTML 表單之外的方法發送,例如 fetch()
調用時,主體可以採用任何類型。如 HTTP 1.1 規範所述,POST
被設計為允許一個統一的方法來涵蓋以下功能:
- 對現有資源進行註釋
- 將消息發佈到佈告板、新聞組、郵件列表或類似的文章組
- 通過註冊模式添加新用戶
- 將數據塊(例如提交表單的結果)提供給數據處理過程
- 通過附加操作擴展數據庫
語法
http
POST /test
範例
使用默認的 application/x-www-form-urlencoded
內容類型的簡單表單:
http
POST /test HTTP/1.1
Host: foo.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
field1=value1&field2=value2
使用 multipart/form-data
內容類型的表單:
http
POST /test HTTP/1.1
Host: foo.example
Content-Type: multipart/form-data;boundary="boundary"
--boundary
Content-Disposition: form-data; name="field1"
value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
--boundary--
規範
Specification |
---|
HTTP Semantics # POST |
瀏覽器相容性
BCD tables only load in the browser