HTTP 請求和響應格式

shupan001發表於2011-12-06
請求頭格式

a) 通用頭(general-header):
Cache-Control:客戶端希望服務端如何快取自己的請求資料,如"Cache-Control: no-cache","Cache-Control: max-age=0";
Connection:客戶端是否希望與服務端之間保持長連線,如"Connection: close", "Connection: keep-alive";
Date:只有當請求方法為POST或PUT方法時客戶端才可能會有些欄位;
Pragma:包含了客戶端一些特殊請求資訊,如 "Pragma: no-cache" 客戶端希望代理或應用伺服器不應快取與該請求相關的結果資料;
Via:一般用在代理閘道器嚮應用伺服器傳送的請求頭中,表明該來自客戶端的請求經過了閘道器代理,
     格式為:"Via: 請求協議版本  閘道器標識   [其它資訊] ",
     如 :" Via: 1.1  webcache_250_199.hexun.com:80 (squid)"

 

b) 請求頭(request-header):
Accept: 表明客戶同端可接受的請求迴應的媒體型別範圍列表。星號“*”用於按範圍將型別分組,用“*/*”指示可接受全部型別;用“type/*”指示可接受 type型別的所有子型別,如“ Accept: image/gif, image/jpeg, */*”;
Accept-Charset:客戶端所能識別的字符集編碼格式,格式:“Accept-Charset: 字符集1[:權重],字符集2[:權重]”,如:“ Accept-Charset: iso-8859-5, unicode-1-1;q=0.8”;
Accept-Language:客戶端所能識別的語言,格式:“Accept-Language: 語言1[:權重],語言2[:權重]”,如:” Accept-Language: zh, en;q=0.7”;
Host:客戶請求的主機域名或主機IP,格式:“Host: 域名或IP[:埠號]”,如:“Host: www.hexun.com:80“,請求行中若有HTTP/1.1則必須有該請求頭;
User-Agent:表明使用者所使用的瀏覽器標識,主要用於統計的目的;
Referer:指明該請求是從哪個關聯連線而來;

Accept-Encoding:客戶端所能識別的編碼壓縮格式,如:“Accept-Encoding: gzip, deflate”;
If- Modified-Since:該欄位與客戶端快取相關,客戶端所訪問的URL自該指定日期以來在服務端是否被修改過,如果修改過則服務端返回新的修改後 的資訊,如果未修改過則伺服器返回304表明此請求所指URL未曾修改過,如:“If-Modified-Since: Fri, 2 Sep 2006 19:37:36 GMT”;
If-None-Match:該欄位與客戶端快取相關,客戶端傳送URL請求的同時傳送該欄位及標識,如 果服務端的標識與客戶端的標識一致,則返回304表明此URL未修改過,如果不一致則服務端返回完整的資料資訊,如:“If-None-Match: 0f0a893aad8c61:253, 0f0a893aad8c61:252, 0f0a893aad8c61:251”;
Cookie:為擴充套件欄位,儲存於客戶端,向同一域名的服務端傳送屬於該域的cookie,如:“Cookie: MailUserName=whouse”;

 

c) 實體頭(entity-header): (此類頭存在時要求有資料體)
Content-Encoding:客戶端所能識別的編碼壓縮格式,如:“Content-Encoding: gzip, deflate”;
Content-Length:客戶端以POST方法上傳資料時資料體部分的內容長度,如:“ Content-Length: 24”;
Content- Type:客戶端傳送的資料體的內容型別,如:“Content-Type: application/x-www-form-urlencoded”為以普通的POST方法傳送的資料;“Content-Type: multipart/form-data; boundary=---------------------------5169208281820”,則表明資料體由多部分組成,分隔符為 “-----------------------------5169208281820”;

 

響應格式

a) 通用頭(general-header):
Cache- Control:服務端要求中間代理及客戶端如何快取自己響應的資料,如“Cache-Control: no-cache”,如:“Cache-Control: private” 不希望被快取,“Cache-Control: public” 可以被快取;
Connection:服務端是否希望與客戶端之間保持長連線,如“Connection: close”, “Connection: keep-alive”;
Date:只有當請求方法為POST或PUT方法時客戶端才可能會有些欄位;
Pragma:包含了服務端一些特殊響應資訊,如 “Pragma: no-cache” 服務端希望代理或客戶端不應快取結果資料;
Transfer-Encoding:服務端向客戶端傳輸資料所採用的傳輸模式(僅在HTTP1.1中出現),如:“Transfer-Encoding: chunked”,注:該欄位的優先順序要高於“Content-Length” 欄位的優先順序;

 

b)響應頭(response-header):
Accept-Ranges:表明服務端接收的資料單位,如:“Accept-Ranges: bytes”, ;
Location:服務端向客戶端返回此資訊以使客戶端進行重定向,如:“Location: http://www.hexun.com”;
Server:服務端返回的用於標識自己的一些資訊,如:“ Server: Microsoft-IIS/6.0”;
ETag:服務端返回的響應資料的標識欄位,客戶端可根據此欄位的值向伺服器傳送某URL是否更新的資訊;

 

c)實體頭(entity-header): (此類頭存在時要求有資料體)
Content-Encoding:服務端所響應資料的編碼格式,如:“Content-Encoding: gzip”;
Content-Length:服務端所返回資料的資料體部分的內容長度,如:“ Content-Length: 24”;
Content-Type:服務端所返回的資料體的內容型別,如:“Content-Type: text/html; charset=gb2312” ;
Set-Cookie:服務端返回給客戶端的cookie資料,如:“ Set-Cookie: ASP.NET_SessionId=icnh2ku2dqlmkciyobgvzl55; path=/”

 

 

Range  Content-Range

HTTP頭中一般斷點下載時才用到Range和Content-Range實體頭,
Range使用者請求頭中,指定第一個位元組的位置和最後一個位元組的位置,如(Range:200-300)
Content-Range用於響應頭

請求下載整個檔案:
***********************************
GET  /test.rar  HTTP/1.1
Connection:  close
Host:  116.1.219.219
Range:  bytes=0-100
***********************************
Range頭域可以請求實體的一個或者多個子範圍,Range的值為0表示第一個位元組,也就是Range計算位元組數是從0開始的
表示頭500個位元組:bytes=0-499
表示第二個500位元組:bytes=500-999
表示最後500個位元組:bytes=-500
表示500位元組以後的範圍:bytes=500-
第一個和最後一個位元組:bytes=0-0,-1
同時指定幾個範圍:bytes=500-600,601-999


一般正常回應
***********************************
HTTP/1.1 206 OK
Content-Length:  801     
Content-Type:  application/octet-stream 
Content-Location: http://www.onlinedown.net/hj_index.htm
Content-Range:  bytes  0-100/2350 //2350:檔案總大小
Last-Modified: Mon, 16 Feb 2009 16:10:12 GMT
Accept-Ranges: bytes
ETag: "d67a4bc5190c91:512"
Server: Microsoft-IIS/6.0
Date: Wed, 18 Feb 2009 07:55:26 GMT
***********************************

注意:如果使用者的請求中含有range ,則伺服器的相應程式碼為206。
206 - Partial Content 客戶傳送了一個帶有Range頭的GET請求,伺服器完成了它(HTTP 1.1新)。


相關文章