HTTP 協定本質上是基於文字的協定,但透過 Content-Type 與 Content-Transfer-Encoding 標頭,可完整支援二進制資料傳輸。
適用於檔案上傳(表單含檔案欄位):
POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; name="image.png"
Content-Type: image/png
[二進制檔案內容...]
------WebKitFormBoundary7MA4YWxkTrZu0gW--
適用於 API 直接傳送檔案串流:
POST /api/data HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 1024
[原始二進制位元組...]
Content-Type 判斷編碼方式。Content-Length 或 Transfer-Encoding: chunked 讀取 Body 長度。不必強制一致。 HTTP 協定設計為向下相容。
| 情境 | 請求版本 | 回應版本 | 說明 |
|---|---|---|---|
| 現代瀏覽器存取舊伺服器 | HTTP/1.1 或 HTTP/2 | HTTP/1.0 | 伺服器以支援的最高版本回應 |
| 舊用戶端存取新伺服器 | HTTP/1.0 | HTTP/1.1 | 伺服器回應 1.1,但不使用 1.1 專屬特性(如 Keep-Alive 需客戶端明確要求) |
| HTTP/2 升級 | HTTP/1.1 (Upgrade header) | HTTP/2 (101 Switching Protocols) | 協定升級機制 |
只要雙方遵守各自版本的 RFC 規範,版本號不一致不會導致通訊失敗,只會限制可用功能集合。
詳細報文格式規範請參考:HTTP 協定詳細解析