有關GET POST 傳輸內容
Contents
在開發 Web 應用時,GET 和 POST 是最常用的兩種 HTTP Method。很多人(包括我自己)曾誤以為 GET 和 POST 都有嚴格的長度限制,但深入了解後才發現,這個觀念並不完全正確。
HTTP 規範怎麼說?
HTTP 規範本身並未規定 GET 或 POST 的資料長度上限。 長度限制是來自於瀏覽器、Web 伺服器或 Proxy 伺服器的實作,而非 HTTP 協議本身。
GET 的長度限制
GET 的參數附加在 URL 後面(Query String),因此受到 URL 長度限制:
| 瀏覽器/伺服器 | URL 長度上限(近似值) |
|---|---|
| Chrome | 約 8,000 字元 |
| Firefox | 約 65,536 字元 |
| IE / Edge | 約 2,048 字元 |
| Apache | 約 8,192 字元(可調整) |
| Nginx | 約 4,096 字元(可調整) |
實務上,為了相容性,建議 URL 不超過 2,000 字元。
POST 的長度限制
POST 的資料放在 HTTP Request Body 中,HTTP 規範並未限制大小,但伺服器端通常會設定上限:
|
|
GET 與 POST 的語義差異
長度限制只是技術面,更重要的是語義差異:
安全性(Safe)
GET 是「安全的」操作,表示它不應修改伺服器上的資料,只用於讀取。POST 則可能修改資料。
冪等性(Idempotent)
GET 是冪等的——多次執行同一請求,結果相同。POST 不是冪等的——多次提交可能產生不同結果(例如重複下訂單)。
快取
GET 請求可以被瀏覽器和 Proxy 快取;POST 預設不快取。
書籤與分享
GET 參數在 URL 中,可以加入書籤或分享連結;POST 資料無法直接分享。
選擇 GET 或 POST 的原則
|
|
實際範例
|
|