標籤:
協議就是互動雙方協商好要遵守的規範,打個不恰當的比方,就好像交談雙方約定要使用的同一種語言。如果我講英文,你講中文,大家都相互聽不懂,交流那就得嗝屁了。
HTTP協議就是需要互動的用戶端(通常是瀏覽器)和http伺服器協商共同說的一種語言。HTTP協議是基於文本的,所以,我們可以不藉助瀏覽器或者其它http用戶端,只使用telnet與http伺服器相連,然後發送一個基於http請求規範的文本,伺服器照樣能明白我們想要什麼。
HTTP的請求報文和響應報文都是由三部分組成:開始行,首部行,實體主體。本文我們主要是熟悉下首部行常見的一些headers。
HTTP headers分為以下四種類型:
- Entity: 實體主體(entity body)或資源的元資訊
- General: 適用request和reponse資訊
- Request: 瀏覽器或者其它用戶端向伺服器發送的請求
- Response: 伺服器針對請求的響應
常見的適用Request的首部:
- Accept: 指定接受的Internet媒體類型
- Accept-Charset: 指定接受的字元編碼
- Accept-Encoding: 指定接受的資料格式轉換,比如壓縮
- Accept-Language: 指定接受的自然語言
- Authorization: 為請求資源需提供的驗證資訊
- Expect: 表示用戶端要求的伺服器執行的特殊動作
- From: 發送請求的人的email
- Host: 指定資源所在的Internet host和連接埠號碼
- If-Match,If-None-Match: 與entity tags配合的緩衝機制(用戶端緩衝)
- If-Modified-Since, If-Unmodified-Since: 與指定時間配合的緩衝機制
- Proxy-Authorization: 向代理提供身份
- Referer: 擷取請求請求URI的地址
- User-Agent: 產生請求的user agent或用戶端資訊
常見的適用Response的首部:
- Accept-Ranges: 伺服器接受的資源切割的類型範圍,如Accept-Ranges: bytes
- Age: 原始伺服器響應產生的時間
- ETag: 基於緩衝目為請求的資源(variant)產生的類似對象id的entity tag
- Location: 資源重新導向的目的地
- Proxy-Authenticate: 表明需要驗證資訊來擷取資源
- Retry-After: 表明服務unavailable的時間
- Server: 伺服器處理請求的軟體資訊
常見的適用Response和Request的首部:
- Cache-Control: 指定在request/response鏈上所有緩衝機制必須遵循的指令
- Connection: 表明某一特定串連需要的動作,設定後可防止代理再次利用此串連互動
- Date: 資訊產生的時間
- Pragma: 在request/response鏈原則上要遵循的指令
- Upgrade: 用戶端偏向使用的協議,如果伺服器支援這種協議,則轉換有此種協議互動
- Warning: 未反映在正常資訊裡的額外資訊
常見的適用於Entity的首部:
- Allow: 允許的對資源的操作,例如Allow: GET, HEAD, PUT
- Content-Encoding: 表明針對entity進行的額外的資料轉換,比如壓縮
- Content-Language: entity所適用的語言
- Content-Length: entity-body大小
- Content-Location: 如果entity內容來自其它URI,指明該URI的位置
- Content-Type: 指明Internet媒體類型,經常還會包括字元編碼類型
- Content-Range: 資源切割的位置
- Expires: 表明響應到期的時間
- Last-Modified: 最後修改時間
參考連結:
- [Quick reference to HTTP headers](http://www.cs.tut.fi/~jkorpela/http.html)
常見的HTTP Headers