HTTP協議被設計得非常強大,但很多網絡應用都沒有利用這些強大之處。比如緩存和HTTP方法。HTTP為資源的增刪改查分別提供了 PUT,DELETE,POST,GET等方法,確沒有人用。所以,最近興起的Restful只是對優化web架構、充分利用HTTP協議的能力的一個回 歸。下面是一些HTTP協議的概述:
消息:HTTP協議中頂級數據單位,使用HTTP協議通信的機器之間來回發送的數據包
實體:只出現在有消息體的消息中。它按照實體header定義的格式和編碼進行傳輸。
方法:
OPTIONS :客戶端查詢服務器對與某URL允許的通信選項
GET :從服務器獲取URL對應的資源
HEAD :除了服務器響應中不能包含消息體,該方法與GET一樣。用于只需少數元信息的情況
POST :被設計用來注解、修改URL所對應的資源
PUT :被設計用來修改或創建資源。當URL對應的資源存在時,則提交的作為新版本,否則新建資源
DELETE :被設計用來刪除URL對應的資源
TRACE :主要用來測試。服務器將最終接收到的請求本身發送回來,作為客戶端診斷依據
CONNECT :保留的方法名,用于代理切換隧道
header特殊參數:
q :在大多的各種header值中,都可以看到一個名為q=0.2、q=0.7之類的參數。因為發送header主要是一個和服務器的協商過程,所以能允許的選項一般不只一個,但具體哪個優先呢?這就需要為一些選項制定權重值。q參數的值是一個從0到1的浮點數,默認是1,為0表示客戶端無法接收,小數點后 不能超過3位。另外,header的多個值之間用逗號分隔而不是分號。比如這個header:Accept:audio/*;q=0.2,audio /basic,這表示客戶端告訴服務器“我最喜歡的是一個audio/basic類型的音頻(因為它沒有設置q參數,默認是1),但如果沒有,給我一個任 意類型(audio/*)的音頻也行”。當然,這只是q參數一個比較簡單的應用。
常規header :
Cache-Control :用于指出請求/響應鏈上所有緩存必須服從的指令,它必須具有穿透各代理和網關的能力。HTTP1.0可能不支持該header和Pragma:no-cache。
Connection :允許客戶端指出希望特定連接的選項,且禁止由代理在將來的連接中通訊
Date :表示消息發生的日期和時間,與RFC 822中的orig-date語義一致
Pragma :用來包括實現特定的指令,可能應用到請求/響應鏈上所有接收方
Trailer :指出給出的頭部域集合在以chunked transfer-coding編碼的消息的尾部中存在
Transfer-Encoding :指出應用什么類型的轉換到消息主體上,與content-coding不同,這不是指定實體的屬性而是消息的
Upgrade :允許客戶端指出其支持的其他通訊協議,切愿意使用之,若服務器發現切換是可行的,必須在響應中回101
Via :必須由網關或代理來指出請求中的UA和服務器、以及在響應中的原始服務器和客戶端的中間協議和接收方。用于跟蹤消息轉發,避免請求循環
Warning :用戶攜帶關于消息的狀態和轉換的額外信息,可能不在消息中反映。一般用于警告應用到消息實體上的緩存操作或轉換缺少語義透明度
請求header:
Accept :客戶端指出響應可以接受的媒體類型
Accept-Charset :客戶端指出響應可以接受的字符集
Accept-Encoding :客戶端指出響應可以接受的字符編碼
Accept-Language :客戶端指出允許的語言
Authorization :客戶端在受到401后,需要向服務器標明身份,包括此header即可
Expect : 客戶端指出要求的特殊服務器行為。若服務器無法滿足,可以返回417
From :
Host : 客戶端指出要請求的資源的因特網主機和端口號
If-Match : 用于與方法一起使其條件化
If-Modified-Since : 用于方法使其條件化,如果請求的變量在本域指定的時間從來不曾修改過,則實體將不會從服務器返回,改為304
If-None-Match : 用于與方法一起使其條件化
If-Range : 用于與方法一起使其條件化
If-Unmodified-Since : 用于與方法一起使其條件化,如果請求的資源自header值時間以來未改變,則服務器執行該請求
Max-Forwards : 提供某種機制,TRACE和OPTIONS方法用來限制可以轉發給下個入界服務器代理或網關的數量,相當于客戶端跟蹤請求鏈
Proxy-Authorization : 允許客戶端向代理標識自己,該代理需要認證
Range : 字節范圍,可以指定單個實體中單個字節范圍或范圍集
Referer : 允許服務器為感興趣的資源、日志、優化緩存等生成向后鏈接清單
TE : 指出愿意在響應中接受任何擴展的transfer-coding
User-Agent : 包含發起請求的用戶代理(瀏覽器和OS)的信息
響應header:
Accept-Ranges :服務器指出對請求的資源可接受的范圍,可以是字節數或none
Age :HTTP使用改header來傳輸從緩存服務器獲取時的響應消息的估計年齡,是緩存服務器估計從響應產生或被原始服務器重新證實以來的總時間
ETag :提供所請求的實體標簽的當前值
Location :用來重定向接收
方到非URI的位置來完成請求。對于201,Location是由請求創建的新資源的標識
Proxy-Authenticate :該header必須作為407響應的一部分,指出認證方案和可應用到代理的URI上的參數
Retry-After :能與503響應一起用于指出希望該服務對客戶端可以維持多久,
Server :指出服務器使用的軟件信息
Vary :
WWW-Authenticate :必須包括在401中,值至少有challenge組成,它指出認證方案和可應用到URI的參數
實體header:
Allow :客戶端指出對URI的資源允許的方法
Content-Encoding : 用作對media-type的修飾符,其值將必須應用到實體body上的額外內容編碼。主要用來允許壓縮而不丟失下層媒體類型標識
Content-Language : 客戶端指出自己所選的語言,指出目標觀眾對所封裝實體的自然語言。這可能與實體body內所有語言相同
Content-Length :指出實體body按十進制數的字節流的尺寸
Content-Location :如果實體能從獨立于請求URI的位置訪問,則服務器可以提供該實體自己的位置
Content-MD5 :是實體body的MD5摘要,以便提供端到端的完整性檢查
Content-Range :與實體body的一部分一起發送,用來指定該部分body應用到全部body的哪個地方
Content-Type :指出發送給接收方的實體body的媒體類型,媒體類型參見IANA
Expires :指出響應被認為過期的日期/時間
Last-Modified :指出原始服務器認為該變量最后修改的日期和時間,確實意思取決于原是服務器的實現和資源的屬性。對文件,可能只是文件系統內最后修改時間
extension-header :
狀態碼:
100 : Continue
101 : Switching Protocols
200 : OK
201 : Created
202 : Accepted
203 : Non-Authoritative Information
204 : No Content
205 : Reset Content
206 : Partial Content
300 : Multiple Choices
301 : Moved Permanently
302 : Found
303 : See Other
304 : Not Modified
305 : Use Proxy
307 : Temporary Redirect
400 : Bad Request
401 : Unauthorized
402 : Payment Required
403 : Forbidden
404 : Not Found
405 : Method Not Allowed
406 : Not Acceptable
407 : Proxy Authentication Required
408 : Request Time-out
409 : Conflict
410 : Gone
411 : Length Required
412 : Precondition Failed
413 : Request Entity Too Large
414 : Request-URI Too Large
415 : Unsupported Media Type
416 : Requested range not satisfiable
417 : Expectation Failed
500 : Internal Server Error
501 : Not Implemented
502 : Bad Gateway
503 : Service Unavailable
504 : Gateway Time-out
505 : HTTP Version not supported
extension-code
關鍵字:HTTP