http報文是在http利用程序之間發送的數據塊。
報文活動方向:
#1:報文流入源端服務器:報文流入源服務器,工作完成以后,會流回用戶的Agent代理中。
#2:報文向下游活動:不論是要求報文還是響應報文,所有報文都會向下游活動。
3部份組成報文:
#1:起始行:報文描寫。ASCII文本。
#2:首部:屬性描寫。ASCII文本。與起始行分隔符為CRLF(ASCII碼13 、ASCII碼10)。
#3:主體:可選,數據主體。包括文本或2進制數據,也能夠為空。
http報文可以分為倆類:要求報文、響應報文。
#1:要求報文的格式:
#方法(method):
客戶端希望服務器對資源履行的動作。如:GET、HEAD、POST...
GET:經常使用,通經常使用于要求服務器發送某個資源。
HEAD:服務器只返回首部,不會返回實體的主體部份。使用HEAD可以:1.在不獲得資源的情況下了解資源;2.查看響應的狀態碼,看看對象是不是存在;3.測試資源是不是被修改了
PUT:向服務器寫入文檔。讓服務器用要求的主體部份來創建或替換1個由所要求的URL命名的新文檔。
POST:向服務器發送數據,通常支持html的表單。
TRACE:要求報文不能帶有實體的主體部份。TRACE要求會在目的服務器端發起1個“環回”診斷。要求可能要穿過防火墻、代理、網關或其他1些利用程序。目的服務器會彈回1條TRACE響應,并在響應主體上攜帶收到的原始要求報文。目的是查看所有中間http利用程序組成的要求/響應鏈上,原始報文是不是被修改或損壞。
OPTION:要求服務器告知其支持的各種功能。
DELETE:要求服務器刪除指定URL所指定的資源。
#要求(equest-URL):
命名了所要求資源,或URL路徑組件的完善URL
#版本(version):
報文所使用的HTTP版本。
格式:HTTP/<major>.<minor>
note:主要版本號(major)和次要版本號(minor)都是整數。
#狀態碼(status):
3位數,描寫要求進程所產生的情況。
100~199:信息性狀態碼
200~299:成功狀態碼
300~399:重定向狀態碼
400~499:客戶端毛病狀態碼
500~599:服務端毛病狀態碼
狀態碼 | 緣由短語 | 含義 |
100 | Continue | 收到要求的起始部份,客戶端應當繼續要求 |
101 | Switching Protocols | 服務器正根據客戶真個唆使將協議切換成Update首部列出的協議 |
200 | OK | 服務器已成功處理要求 |
201 | Created | 對需要服務器創建對象的要求來講,資源已創建終了 |
202 | Accepted | 要求已接收,但服務器還沒有處理 |
203 | Non-Acthoritative Information | 服務器已將事務成功處理,只是實體首部包括的信息不是來自原始服務器,而是來自資源的副本 |
204 | No Content | 響應報文包括1些首部和1個狀態行,但不包括實體的主體內容。 |
205 | Reset Content | 閱讀器應當充值當前頁面上的html表單 |
206 | Partial Content | 部份要求成功 |
300 | Multiple Choices | 客戶端要求了實際指向多個資源的URL。這個代碼合適1個選項類表1起返回的,然后用戶就能夠選擇他希望使用的選項。 |
301 | Moved Permanently | 要求的URL已移走。響應中應當包括1個Location URL,說明資源現在所處的位置。 |
302 | Found | 類似于301 |
303 | See Other | 告知客戶端應當用另外一個URL獲得資源。這個新的URL位于響應報文的Location首部 |
304 | Not Modified | 客戶端可以通過它們所包括的要求首部發起條件要求。這個代碼說明資源未產生變化。 |
305 | Use Proxy | 必須通過代理訪問資源,代理的位置是在Location首部中給出的。 |
306 | (未用) | 這個狀態碼當前并未使用 |
307 | Temporary Redirect | 類似于301 |
400 | Bad request | 告知客戶端它發送了1條異常要求 |
401 | Unauthorized | 與適當的首部1起返回,在客戶端取得資源訪問權之前,請它進行身份認證。 |
402 | Payment Required | 未使用 |
403 | Forbidden | 服務器謝絕了要求 |
404 | Not Found | 服務器沒法找到所要求的URL |
405 | Method Not Allow | 要求中有1個所要求的URI不支持的方法。響應中應當包括1個Allow首部,以告知客戶端所要求的資源支持哪些方法。 |
406 | Not Acceptable | 客戶端可以指定1些參數來講明希望接受哪些類型的實體。服務器沒有資源與客戶端可接受的URL匹配時可以使用此代碼 |
407 | Proxy Authentication Required | 類似于401,但用于需要進行資源認證的代理服務器 |
408 | Request Timeout | 如果客戶端完成其要求時花費的時間太長,服務器可以回送這個狀態碼并關閉連接 |
409 | Confict | 發出的要求在資源上造成了1些沖突 |
410 | Gone | 除服務器曾持有這些資源以外,與404類似 |
411 | Lengh Required | 服務器要求要求報文中包括Content-Lengh首部時會使用這個代碼。發起的要求中若沒有,服務器是不會接受此資源要求的。 |
412 | Precondition Failed | 如果客戶端發起了1個條件要求,如果服務器沒法滿足其中的某個條件,就返回這個響應碼。 |
413 | Request Entity Too Large | 客戶端發送的實體主體部份比服務器能夠或希望處理的要大 |
414 | Request URI Too Long | 客戶端發送的要求所攜帶的要求URL超過了服務器能夠或希望處理的長度 |
415 | Unsupported Media Type | 服務器沒法理解或不支持客戶端所發送的實體的內容類型 |
416 | Request Range Not Statisfiable | 要求報文要求的是某范圍內的指定資源,但這個范圍無效,或未得到滿足 |
417 | Expectation Fail | 要求的Expect首部所包括了1個預期內容,但服務器沒法滿足 |
500 | Internet Server Error | 服務器遇到了1個毛病,使其沒法為要求提供服務 |
501 | Not Implement | 服務器沒法滿足客戶端要求的某個功能 |
502 | Bad Gateway | 作為代理或網管使用的服務器遇到了來自響應鏈中上游的沒法響應 |
503 | Service Unavailable | 服務器目前沒法為要求提供服務,但過1段時間就能夠恢復服務 |
504 | Gateway Timeout | 類似于408,但響應來自網關或代理,此網關或代理在等待另外一臺服務器的響應時出現了超時 |
505 | HTTP Version Not Support | 服務器收到的要求是以它不支持或不愿支持的協議版本表示的 |
#緣由短語(reson-phrase):
數字狀態碼的可讀版本,包括行終止序列之前的所有文本。
緣由短語只對人類成心義。(HTTP/1.0 200 NOT OK) 和 (HTTP/1.0 200 OK)中緣由短語不1樣,但都當作成功唆使處理。
#首部(headers):
0個或多個。
格式:{首部名}{:}{可選空格}{值}{CRLF}
通用首部:要求、響應報文都可使用的。
要求首部:要求報文特有。
響應首部:響應報文特有。
實體首部:用于應對實體的主體部份。
擴大首部:非標準的首部,由程序開發者創建。
首部名 | 類型 | 基本語法 | 例子 | 注釋 |
Accept | 要求首部 | Accept: text/*, image/* Accept: text/*, image/gif, image/jpeg; q=1 |
用于通知服務器可以接受哪些媒體類型。為了避免服務器有多重版本的媒體類型,還可以在首部字段中包括1個質量值(q值)列表,用于告知服務器它優選哪一種媒體類型。 ”*“是用于通配媒體類型,比如”*/*“表示所有類型,”image/*“表示所有圖片類型 |
|
Accept-Charset | 要求首部 | Accept-Charset:(charset | *) [";" "q" "= " qvalue] | Accept-Charset: iso-latin⑴ | 通知服務器它可以接受哪些字符集或哪些事優選字符集。當有多種字符集是,可以通過質量值告知服務器哪一個字符集是優選的。 如果沒有"*",那末值字段中沒有設置的所有字符集的q值都默許為0,這不包括指定的字符,它的默許值為1。 |
Accept-Encoding | 要求首部 | Accept-Encoding: (content-coding | "*") [";" "q" "=" qvalue] | Accept-Encoding: gzip Accept-Encoding: compress; q=0.5, gzip; q=1 |
客戶端告知服務器它可以接受哪些編碼方式。 |
Accept-Language | 要求首部 | Accept-Language: (((1*8ALPHA["-"1*8ALPHA] | "*")) [";" "q" "=" qvalue]) | Accept-Language: en Accept-Language: en;q=0.7, en-gb;q=0.5 |
通知服務器可接受或優選哪些語言。 |
Authorization | 要求首部 | Authorization: Authorization-scheme #Authorization-param | Authorization: Basic YnJpYW4tdG90dHk6T3ch | 由客戶端發送的,用于向服務器回應自己的身份驗證信息。收到401狀態碼,要求在要求中包括這個首部。 |
From | 要求首部 | From: mailbos | From: dawn@163.com | 說明要求來自何方。 |
Host | 要求首部 | Host: host [":" port] | Host: www.dawn.com:80 | 提供客戶端想要訪問的哪臺機器的因特網主機名和端口號。 |
If-Modified-Since | 要求首部 | If-Modified-Since: HTTP-date | If-Modified-Since: Thu, 03 Oct 1997 17:15:00 GMT | 用于發起條件要求。客戶端可以GET方法去要求服務器上的資源,而響應則取決于客戶端上次要求此資源以后,該資源是不是被修改過。如果沒有被修改過,服務器會回送1條304狀態碼,則不會回送此資源。 |
If-Unmodified-Since | 要求首部 | If-Unmodified-Since: HTTP-date | If-Unmodified-Since: Thu, 03 Oct 1997 17:15:00 GMT | 用于發起條件要求。客戶端可以GET方法去要求服務器上的資源,而響應則取決于客戶端上次要求此資源以后,該資源是不是被修改過。如果沒有被修改過,才會回送此資源。 |
Expect | 要求首部 | Expect: ("100-continue" | expectation-extension) | Expect: 100-continue | 告知服務器他們需求某種行動。與狀態碼100密切相干 |
If-Match | 要求首部 | If-Match: ("*" | entity-tag) | If-Match: "11e92a⑷57b⑶1345aa" | 服務器將對照If-Match首部的實體標記與資源當前的實體標記,如果匹配,就將對象返回。 |
If-None-Match | 要求首部 | If-None-Match: ("*" | entity-tag) | If-None-Match: "11e92a⑷57b⑶1345aa" | 服務器將對照If-Match首部的實體標記與資源當前的實體標記,如果不匹配,就將對象返 |
If-Range | 要求首部 | If-Range: (HTTP-date | entity-tag) | If-Range: "11e92a⑷57b⑶1345aa" If-Range: Thu, 03 Oct 1997 17:15:00 GMT |
利用程序具有某范圍內資源的副本,它對范圍進行再校驗,如果范圍無效,要獲得新的資源,在這類情況下使用這個首部。 |
Max-Forwards | 要求首部 | Max-Forwards: 1*DIGIT | Max-Forwards: 5 | 與TRACE1并使用,以指定要求所經過的代理或其他中間節點的最大數目。 |
Pragma | 要求首部 | Pragma: pragma-directive | Pragma: no-cache | Pragma首部用于隨報文傳送1些指令,這些指令幾近可以包括任何內容,但通常會用這些指令來控制緩存的行動。 |
Proxy-Authorization | 要求首部 | Proxy-Authorization: credentials | Proxy-Authorization: Basic YnJpYW4tdG90dHk6T3ch | 客戶端用于響應Proxy-Authenticate質詢。 |
Referer | 要求首部 | Referer: (absoluteURL | relativeURL) | Referer: http://www.dawn.com/index.html | 客戶端要求中加入此首部,可使服務器知道客戶端是從哪里取得其要求的URL。閱讀器所做的工作相當簡單。如果在主頁A上點擊1個鏈接,進入主頁B,閱讀器就會在要求中插入1個帶有值A的Refer首部。只有你點擊鏈接的時候閱讀器才會插入Refer首部,自己輸入的URL中不會包括此首部。 |
TE | 要求首部 | TE: ("trailers" | (transfer-extension[accept-params])) | TE: TE: chunked |
用于說明客戶端能否處理位于分塊編碼的響應拖掛中的首部。如果這個值為空,就只接受分塊傳輸比啊那末。特定標記"trailers"說明分塊響應中可以接受Trailer首部。 |
User-Agent | 要求首部 | User-Agent: (product | comment) | User-Agent: Mozilla/4.0 (Compatible; MSIE 5.5; Windows NT 5.0) | 值是利用程序的名稱,可能還會有1個描寫性注釋。 |
Client-ip | 擴大要求首部 | Client-ip: ip-address | Client-ip: 209.1.33.49 | 是1些比較老的客戶端和代理使用的擴大首部,用于傳輸運行客戶端程序的計算機IP地址。不安全。 |
Cookie | 擴大要求首部 | Cookie: ink=IUOKy59BC708378908CFF 89OE5573998A115 |
用于客戶端辨認和跟蹤的擴大首部。 | |
Cookie2 | 擴大要求首部 | Cookie2: $version="1" | 用于客戶端辨認和跟蹤的擴大首部。Cookie2用于辨認要求發起者能夠理解哪一種類型的Cookie。 | |
UA-(CPU, Disp, OS, Color, Pixels) | 擴大要求首部 | "UA" "-" ("CPU" | "Disp" | "OS" | "Color" | "Pixels") ":" (cpu | screensize | os-name | display-color-depth) | UA-CPU: X86 UA-Disp: 640, 480, 8 UA-OS: windows 95 UA-Color: color8 UA-Pixels: 640 X 480 |
提供了客戶端機器的相干信息,以燕服務器更好地進行內容選擇。 UA-CPU(客戶真個CPU)、UA-Disp(客戶端顯示器的尺寸和色采深度)、UA-OS(客戶端機器的操作系統)、UA-Color(客戶端顯示器的色采深度)、UA-Pixels(客戶端顯示器的尺寸) |
X-Forwarded-for | 擴大要求首部 | X-Forwarded-for: addr | X-Forwarded-for: 64.95.76.161 | 很多代理服務器(如Squid)會用這個首部來講明某條要求都被轉發了給誰。 |
Accept-Range | 響應首部 | Accept-Range: range-unit | none | Accept-Range: none Accept-Range: bytes |
告知客戶端是不是接受要求資源的某個范圍。 |
Age | 響應首部 | Age: delta-seconds | Age: 60 | 告知接受端響應已產生了多少時間,HTTP/1.1緩存必須發送的每條響應中都包括1個Age首部 |
Allow | 響應首部 | Allow: #Method | Allow: GET, HEAD | 通知客戶端可以對特定資源使用那些HTTP方法,發送405響應,服務器必須包括Allow首部 |
Location | 響應首部 | Location: absoluteURL | Location: http://www.dawn.com/ | 服務器通過此首部將客戶端導向某個資源的地址,這個資源可能在客戶端最后1次要求后被移動過,也多是在對要求的響應中創建的。 |
Proxy-Authenticate | 響應首部 | Proxy-Authenticate: challenge | Proxy-Authenticate: Basic realm="Super Scret Corporate FinancialDocument" | 代理通過這個首部來質詢發送要求的客戶端,要求其對本身進行認證。如果1臺HTTP/1.1代理服務器發送1條407響應,就必須包括此首部。 |
Public | 響應首部 | Public: HTTP-method | Public: OPTIONS, GET, HEAD, TRACE, POST | 服務器告知客戶端它支持哪些方法。 |
Retry-After | 響應首部 | Retry-After: (HTTP-date | delta-seconds) | Retry-After: Thu, 03 Oct 1997 17:15:00 GMT Retry-After: 120 |
告知客戶端甚么時候重新發送某資源的要求。此首部可以與503狀態碼配合使用,給出客戶端可以重試其要求的具體日期。服務器還可以在將客戶端重定向到資源時,通過這個首部通知客戶端在對重定向的資源發送要求之前需要等待的時間。對創建動態資源的服務器來講,這個首部非常有用。 |
Server | 響應首部 | Server: (product | comment) | Server: Microsoft-Internet-Information-Server/1.0 Server: Websitepro/1.1f (s/n wpo-07d0) Server: apache/1.2b6 via proxy gateway CERN-HTTPD/3.0 libwww/2.13 |
它為服務器提供了1種向客戶端標識自己的方式。它的值就是服務器名字和1個可U型那的服務器注釋。 |
Title | 響應首部 | Title: document-title | Title: CNN Interactive | 主要用于HTML頁面,這些HTML頁面有著服務器可使用的明確的標題標記。 |
Vary | 響應首部 | Vary: ("*" | field-name) | Vary: User-Agent | 通知客戶端,在服務器真個協商中會使用那些來自客戶端要求的首部。值是1個首部列表。 |
Warning | 響應首部 | Warning: warning-value | Warning: 113 | 給出更多與要求進程中所產生情況相干的信息。HTTP/1.1規范中定義了幾種正告代碼: 101-響應過時了-響應報文已過期; 111-再驗證失敗-緩存沒法抵達原始服務器造成了再驗證失敗; 112-斷開連接操作-緩存到網絡的連接被刪除; 113-摸索性過期-新鮮性摸索過期時間大于24小時,就返回; 199-雜項正告-報文中可能包括為用戶提供的額外信息,系統不能自動響應; 214-使用了轉換-中間利用程序履行了任何會改變響應內容編碼的轉換; 299-持久雜項正告-毛病中可能包括1個主體部份,為用戶提供了更多的信息,系統不能進行任何自動回應。 |
WWW-Authenticate | 響應首部 | WWW-Authenticate: chanllenge | WWW-Authenticate: Basic realm="Your Private Travel Profile" | 用于401響應,向客戶端發布1個質詢認證方案。 |
Set-Cookie | 擴大響應首部 | Set-Cookie: command | Set-Cookie: lastorder=00183; path=/orders Set-Cookie: private_id=519; secure |
是Cookie首部的搭檔 |
Set-Cookie2 | 擴大響應首部 | Set-Cookie2: command | Set-Cookie2: ID="29046"; Domain=".joes-hardware.com" Set-Cookie2: color=blue |
對Set-Cookie首部的擴大。 |
X-Cache | 擴大響應首部 | X-Cache: HIT | Squid(代理服務器)用此首部通知客戶端某個資源是不是可用。 | |
Content-Base | 實體首部 | Content-Base: absoluteURL | Content-Base: http://www.dawn.com/ | 響應主體中解析的URL指定的基礎URL。 |
Content-Encoding | 實體首部 | Content-Encoding: content-coding | Content-Encoding: gzip Content-Encoding: compress, gzip |
告知客戶端,服務器對內容履行過哪一種或哪些類型的編碼,編碼可使內容在發送響應前進行緊縮,有了這個信息,客戶端就能夠對報文進行解碼。 |
Content-Language | 實體首部 | Content-Language: language-tag | Content-Language: en Content-Language: en, fr |
告知客戶端,應當理解哪一種自然語言。 |
Content-Length | 實體首部 | Content-Length: 1*DIGIT | Content-Length: 2417 | 實體主體部份的長度。 |
Content-Location | 實體首部 | Content-Location: (absoluteURL | relativeURL) | Content-Location: http://www.dawn.com/index.html | 與報文的實體部份相對應的URL。 |
Content-MD5 | 實體首部 | Content-MD5: md5-digest | Content-MD5: Q2h1Y2sgSW51ZwDIAXR5IQ== | 報文主體的MD5摘要。通過這個值可以端到端地檢查數據,在檢查傳輸進程中是不是對數據進行了無意的修改時非常有用。 |
Content-Range | 實體首部 | Content-Range: bytes 500⑼99 / 5400 | 要求傳輸某范圍內的文檔時,產生的結果有此首部給出。提供要求實體的原始實體內的范圍,還給出了全部實體的長度。”*“代表未知。 | |
Content-Type | 實體首部 | Content-Type: media-type | Content-Type: text/html; charset=ios-latin⑴ | 報文中的對象的媒體類型。 |
ETag | 實體首部 | ETag: entity-tag | ETag: "11e92a⑷57b⑶1345aa" ETag: W/"11e92a⑷57b⑶134b5aa" |
為報文中包括的實體提供實體標記。 |
Expires | 實體首部 | Expires: HTTP-date | Expires: Thu, 03 Oct 1997 17:15:00 GMT | 響應失效的日期時間。客戶端可以緩存1份副本,在這個時間到期之前,不用去詢問服務器它是不是有效。 |
Last-Modified | 實體首部 | Last-Modified: HTTP-date | Last-Modified: Thu, 03 Oct 1997 17:15:00 GMT | 提供這個實體最后1次被修改的相干信息。Last-Modified不應當是未來的時間,如果它比Date首部中發送的值還遲,HTTP/1.1服務器就會將Last-Modified時間重置。 |
Range |
實體首部 | Range: bytes=500⑴500 |
說明報文所包括實體的范圍。 | |
Cache-Control | 通用首部 | Cache-Control: no-cache | 用于傳輸對象的緩存信息。 | |
Connection | 通用首部 | Connection: connection-token | Connection:close | 用于擴大keep-alive連接的HTTP/1.1客戶端,keep-alive連接用于控制信息。close意味著響應結束后,連接會被關閉。 |
Date | 通用首部 | Date: HTTP-date | Date: Tue, 3 Oct 1997 02:15:31 GMT | 報文創建的日期時間。緩存可使用這個首部來判斷相應的新鮮度。 |
Proxy-Connection | 通用首部 | Proxy-Connection: (connection-token) | Proxy-Connection: close | 在客戶端和代理之間可以用它來指定與連接(主要是keep-alive連接)有關的選項。它其實不是標準的首部,標準委員會把他當作1個臨時首部,但它得到了閱讀器和代理的廣泛使用。 |
Trailer | 通用首部 | Trailer: field-name | Trailer: Content-Length | 用于說明報文拖掛中提供了哪些首部。 |
Transfer-Encoding | 通用首部 | Transfer-Encoding: transfer-coding | Transfer-Encoding: chunked | 如果需要通過某些編碼來安全地傳送HTTP報文主體,報文中就要包括Transfer-Encoding首部。它的值是1個對報文主體履行過的編碼的列表。 |
Upgrade | 通用首部 | Upgrade; protocol | Upgrade: HTTP/1.1 | 此首部為報文發送者提供了1種手段,使其指定另外一種可能完全不同協議并將此意愿向外廣播。服務器發送101狀態碼響應時,必須包括此首部。 |
Via | 通用首部 | Via: (received-protocol received-by [comment]) | Via: 1.1 joes-hard-ware.com ( Joes-Server/1.0) | 用于在報文經過代理和網關時對其進行跟蹤。如果報文是通過量個中間利用程序傳輸的,那末每一個利用程序都會向其Via字符串中附加1些內容,必須通過HTTP/1.1代理和網關來插入Via首部。 |
MIME-Version | 擴大通用首部 | MIME-Version: DIGIT "." DIGIT | MIME-Version: 1 . 0 | MIME是HTTP的近親。雖然倆者存在根本區分,但有些HTTP服務器確切構造了1些在MIME規范下一樣有效的報文,這類情況下,就需要提供此首部 |
X-Pad | 擴大通用首部 | X-Pad: pad-text | X-Pad: bogosity | 用于解決某些閱讀器中與響應首部長度相干的bug。 |
X-Serial-Number | 擴大通用首部 | X-Serial-Number: serialno | X-Serial-Number: 010014056 | 擴大首部,較老的HTTP利用程序會向報文中插入許可軟件的序列號。 |
#實體的主體部份(entity-body):
包括1個由任意數據組成的數據塊。是http報文的負荷,可以承載很多類型的數字數據:圖片、視頻、HTML文檔、軟件利用程序、信譽卡事務、電子郵件等。
上一篇 書簽備份