HTTP協(xié)議被設(shè)計(jì)得非常強(qiáng)大,但很多網(wǎng)絡(luò)應(yīng)用都沒有利用這些強(qiáng)大之處。比如緩存和HTTP方法。HTTP為資源的增刪改查分別提供了 PUT,DELETE,POST,GET等方法,確沒有人用。所以,最近興起的Restful只是對(duì)優(yōu)化web架構(gòu)、充分利用HTTP協(xié)議的能力的一個(gè)回 歸。下面是一些HTTP協(xié)議的概述:
消息:HTTP協(xié)議中頂級(jí)數(shù)據(jù)單位,使用HTTP協(xié)議通信的機(jī)器之間來回發(fā)送的數(shù)據(jù)包
實(shí)體:只出現(xiàn)在有消息體的消息中。它按照實(shí)體header定義的格式和編碼進(jìn)行傳輸。
方法:
OPTIONS :客戶端查詢服務(wù)器對(duì)與某URL允許的通信選項(xiàng)
GET :從服務(wù)器獲取URL對(duì)應(yīng)的資源
HEAD :除了服務(wù)器響應(yīng)中不能包含消息體,該方法與GET一樣。用于只需少數(shù)元信息的情況
POST :被設(shè)計(jì)用來注解、修改URL所對(duì)應(yīng)的資源
PUT :被設(shè)計(jì)用來修改或創(chuàng)建資源。當(dāng)URL對(duì)應(yīng)的資源存在時(shí),則提交的作為新版本,否則新建資源
DELETE :被設(shè)計(jì)用來刪除URL對(duì)應(yīng)的資源
TRACE :主要用來測(cè)試。服務(wù)器將最終接收到的請(qǐng)求本身發(fā)送回來,作為客戶端診斷依據(jù)
CONNECT :保留的方法名,用于代理切換隧道
header特殊參數(shù):
q :在大多的各種header值中,都可以看到一個(gè)名為q=0.2、q=0.7之類的參數(shù)。因?yàn)榘l(fā)送header主要是一個(gè)和服務(wù)器的協(xié)商過程,所以能允許的選項(xiàng)一般不只一個(gè),但具體哪個(gè)優(yōu)先呢?這就需要為一些選項(xiàng)制定權(quán)重值。q參數(shù)的值是一個(gè)從0到1的浮點(diǎn)數(shù),默認(rèn)是1,為0表示客戶端無法接收,小數(shù)點(diǎn)后 不能超過3位。另外,header的多個(gè)值之間用逗號(hào)分隔而不是分號(hào)。比如這個(gè)header:Accept:audio/*;q=0.2,audio /basic,這表示客戶端告訴服務(wù)器“我最喜歡的是一個(gè)audio/basic類型的音頻(因?yàn)樗鼪]有設(shè)置q參數(shù),默認(rèn)是1),但如果沒有,給我一個(gè)任 意類型(audio/*)的音頻也行”。當(dāng)然,這只是q參數(shù)一個(gè)比較簡單的應(yīng)用。
常規(guī)header :
Cache-Control :用于指出請(qǐng)求/響應(yīng)鏈上所有緩存必須服從的指令,它必須具有穿透各代理和網(wǎng)關(guān)的能力。HTTP1.0可能不支持該header和Pragma:no-cache。
Connection :允許客戶端指出希望特定連接的選項(xiàng),且禁止由代理在將來的連接中通訊
Date :表示消息發(fā)生的日期和時(shí)間,與RFC 822中的orig-date語義一致
Pragma :用來包括實(shí)現(xiàn)特定的指令,可能應(yīng)用到請(qǐng)求/響應(yīng)鏈上所有接收方
Trailer :指出給出的頭部域集合在以chunked transfer-coding編碼的消息的尾部中存在
Transfer-Encoding :指出應(yīng)用什么類型的轉(zhuǎn)換到消息主體上,與content-coding不同,這不是指定實(shí)體的屬性而是消息的
Upgrade :允許客戶端指出其支持的其他通訊協(xié)議,切愿意使用之,若服務(wù)器發(fā)現(xiàn)切換是可行的,必須在響應(yīng)中回101
Via :必須由網(wǎng)關(guān)或代理來指出請(qǐng)求中的UA和服務(wù)器、以及在響應(yīng)中的原始服務(wù)器和客戶端的中間協(xié)議和接收方。用于跟蹤消息轉(zhuǎn)發(fā),避免請(qǐng)求循環(huán)
Warning :用戶攜帶關(guān)于消息的狀態(tài)和轉(zhuǎn)換的額外信息,可能不在消息中反映。一般用于警告應(yīng)用到消息實(shí)體上的緩存操作或轉(zhuǎn)換缺少語義透明度
請(qǐng)求header:
Accept :客戶端指出響應(yīng)可以接受的媒體類型
Accept-Charset :客戶端指出響應(yīng)可以接受的字符集
Accept-Encoding :客戶端指出響應(yīng)可以接受的字符編碼
Accept-Language :客戶端指出允許的語言
Authorization :客戶端在受到401后,需要向服務(wù)器標(biāo)明身份,包括此header即可
Expect : 客戶端指出要求的特殊服務(wù)器行為。若服務(wù)器無法滿足,可以返回417
From :
Host : 客戶端指出要請(qǐng)求的資源的因特網(wǎng)主機(jī)和端口號(hào)
If-Match : 用于與方法一起使其條件化
If-Modified-Since : 用于方法使其條件化,如果請(qǐng)求的變量在本域指定的時(shí)間從來不曾修改過,則實(shí)體將不會(huì)從服務(wù)器返回,改為304
If-None-Match : 用于與方法一起使其條件化
If-Range : 用于與方法一起使其條件化
If-Unmodified-Since : 用于與方法一起使其條件化,如果請(qǐng)求的資源自header值時(shí)間以來未改變,則服務(wù)器執(zhí)行該請(qǐng)求
Max-Forwards : 提供某種機(jī)制,TRACE和OPTIONS方法用來限制可以轉(zhuǎn)發(fā)給下個(gè)入界服務(wù)器代理或網(wǎng)關(guān)的數(shù)量,相當(dāng)于客戶端跟蹤請(qǐng)求鏈
Proxy-Authorization : 允許客戶端向代理標(biāo)識(shí)自己,該代理需要認(rèn)證
Range : 字節(jié)范圍,可以指定單個(gè)實(shí)體中單個(gè)字節(jié)范圍或范圍集
Referer : 允許服務(wù)器為感興趣的資源、日志、優(yōu)化緩存等生成向后鏈接清單
TE : 指出愿意在響應(yīng)中接受任何擴(kuò)展的transfer-coding
User-Agent : 包含發(fā)起請(qǐng)求的用戶代理(瀏覽器和OS)的信息
響應(yīng)header:
Accept-Ranges :服務(wù)器指出對(duì)請(qǐng)求的資源可接受的范圍,可以是字節(jié)數(shù)或none
Age :HTTP使用改header來傳輸從緩存服務(wù)器獲取時(shí)的響應(yīng)消息的估計(jì)年齡,是緩存服務(wù)器估計(jì)從響應(yīng)產(chǎn)生或被原始服務(wù)器重新證實(shí)以來的總時(shí)間
ETag :提供所請(qǐng)求的實(shí)體標(biāo)簽的當(dāng)前值
Location :用來重定向接收
方到非URI的位置來完成請(qǐng)求。對(duì)于201,Location是由請(qǐng)求創(chuàng)建的新資源的標(biāo)識(shí)
Proxy-Authenticate :該header必須作為407響應(yīng)的一部分,指出認(rèn)證方案和可應(yīng)用到代理的URI上的參數(shù)
Retry-After :能與503響應(yīng)一起用于指出希望該服務(wù)對(duì)客戶端可以維持多久,
Server :指出服務(wù)器使用的軟件信息
Vary :
WWW-Authenticate :必須包括在401中,值至少有challenge組成,它指出認(rèn)證方案和可應(yīng)用到URI的參數(shù)
實(shí)體header:
Allow :客戶端指出對(duì)URI的資源允許的方法
Content-Encoding : 用作對(duì)media-type的修飾符,其值將必須應(yīng)用到實(shí)體body上的額外內(nèi)容編碼。主要用來允許壓縮而不丟失下層媒體類型標(biāo)識(shí)
Content-Language : 客戶端指出自己所選的語言,指出目標(biāo)觀眾對(duì)所封裝實(shí)體的自然語言。這可能與實(shí)體body內(nèi)所有語言相同
Content-Length :指出實(shí)體body按十進(jìn)制數(shù)的字節(jié)流的尺寸
Content-Location :如果實(shí)體能從獨(dú)立于請(qǐng)求URI的位置訪問,則服務(wù)器可以提供該實(shí)體自己的位置
Content-MD5 :是實(shí)體body的MD5摘要,以便提供端到端的完整性檢查
Content-Range :與實(shí)體body的一部分一起發(fā)送,用來指定該部分body應(yīng)用到全部body的哪個(gè)地方
Content-Type :指出發(fā)送給接收方的實(shí)體body的媒體類型,媒體類型參見IANA
Expires :指出響應(yīng)被認(rèn)為過期的日期/時(shí)間
Last-Modified :指出原始服務(wù)器認(rèn)為該變量最后修改的日期和時(shí)間,確實(shí)意思取決于原是服務(wù)器的實(shí)現(xiàn)和資源的屬性。對(duì)文件,可能只是文件系統(tǒng)內(nèi)最后修改時(shí)間
extension-header :
狀態(tài)碼:
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
關(guān)鍵字:HTTP