[轉]HTTP請求模型和頭信息

原文連接:http://www.java3z.com/cwbwebhome/article/article2/2406.html css

目錄html

1、鏈接至Web服務器
2、發送HTTP請求
3、服務端接受請求並返回HTTP響應
4、服務器關閉鏈接,瀏覽器解析響應
5、無狀態鏈接
6、實例
(附錄)
HTTP參考

1、鏈接至Webjava

 一個客戶端應用(如Web瀏覽器)打開到Web服務器的HTTP端口的一個套接字(缺省爲80)。     
例如:http://www.myweb.com:8080/index.html
在Java中,這將等同於代碼:
Soceet socket=new Socket("www.myweb.com",8080); 
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

 

2、發送HTTP請求 web

經過鏈接,客戶端寫一個ASCII文本請求行,後跟0或多個HTTP頭標,一個空行和實現請求的任意數據。 一個請求由四個部分組成:請求行、請求頭標、空行和請求數據 瀏覽器

1.請求行:

請求行由三個標記組成:請求方法、請求URI和HTTP版本,它們用空格分隔。
例如:GET /index.html HTTP/1.1緩存

HTTP規範定義了8種可能的請求方法: 服務器

GET                檢索URI中標識資源的一個簡單請求
HEAD              與GET方法相同,服務器只返回狀態行和頭標,並不返回請求文檔
POST              服務器接受被寫入客戶端輸出流中的數據的請求
PUT                服務器保存請求數據做爲指定URI新內容的請求
DELETE          服務器刪除URI中命名的資源的請求
OPTIONS         關於服務器支持的請求方法信息的請求
TRACE            Web服務器反饋Http請求和其頭標的請求
CONNECT        已文檔化但當前未實現的一個方法,預留作隧道處理socket

2.請求頭標:

由關鍵字/值對組成,每行一對,關鍵字和值用冒號(:)分隔。 請求頭標通知服務器有關於客戶端的功能和標識,典型的請求頭標有: 編碼

User-Agent          客戶端廠家和版本
Accept                 客戶端可識別的內容類型列表
Content-Length    附加到請求的數據字節數spa

3.空行:

最後一個請求頭標以後是一個空行,發送回車符和退行,通知服務器如下再也不有頭標。

4.請求數據:

使用POST傳送數據,最常使用的是Content-Type和Content-Length頭標。

3、服務端接受請求並返回HTTP響應

Web服務器解析請求,定位指定資源。服務器將資源副本寫至套接字,在此處由客戶端讀取。
一個響應由四個部分組成;狀態行、響應頭標、空行、響應數據

1.狀態行:

狀態行由三個標記組成:HTTP版本、響應代碼和響應描述。

HTTP版本:向客戶端指明其可理解的最高版本。
響應代碼:3位的數字代碼,指出請求的成功或失敗,若是失敗則指出緣由。
響應描述:爲響應代碼的可讀性解釋。
例如:HTTP/1.1 200 OK
HTTP響應碼: 
1xx:信息,請求收到,繼續處理
2xx:成功,行爲被成功地接受、理解和採納
3xx:重定向,爲了完成請求,必須進一步執行的動做
4xx:客戶端錯誤:

2.響應頭標:

像請求頭標同樣,它們指出服務器的功能,標識出響應數據的細節。 

3.空行:

最後一個響應頭標以後是一個空行,發送回車符和退行,代表服務器如下再也不有頭標。 

4.響應數據:

HTML文檔和圖像等,也就是HTML自己。

4、服務器關閉鏈接,瀏覽器解析響應

1.瀏覽器首先解析狀態行,查看代表請求是否成功的狀態代碼。
2.而後解析每個響應頭標,頭標告知如下爲若干字節的HTML。
3.讀取響應數據HTML,根據HTML的語法和語義對其進行格式化,並在瀏覽器窗口中顯示它。
4.一個HTML文檔可能包含其它須要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進行額外的請求,此過程循環屢次。

5、無狀態鏈接

HTTP模型是無狀態的,代表在處理一個請求時,Web服務器並不記住來自同一客戶端的請求。

6、實例

實例1:

瀏覽器發出請求
GET /index.html HTTP/1.1
服務器返回響應:
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Content-Length: 119
Content-Type: text/html
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="index.css">
</HEAD>
<BODY>
<IMG SRC="image/logo.png">
</BODY>
</HTML>

(附錄)

1.HTTP規範:

Internet工程制定組織(IETF)發佈的RFC指定Internet標準,這些RFC被Internet研究發展機構普遍接受。由於它們是標準文檔,故通常用正規語言編寫,如立法文標同樣。

2.RFC:

RFC一旦被提出,就被編號且不會再改變,當一個標準被修改時,則給出一個新的RFC。做爲標準,RFC在Internet上被普遍採用。

3.HTTP的幾個重要RFC:

RFC1945    HTTP 1.0 描述
RFC2068    HTTP 1.1 初步描述
RFC2616    HTTP 1.1 標準

4.資源標識符URI(Uniform Resource Identifter,URI)

 

HTTP參考

 1、HTTP碼應碼

響應碼由三位十進制數字組成,它們出如今由HTTP服務器發送的響應的第一行。
響應碼分五種類型,由它們的第一位數字表示:

1.1xx:信息,請求收到,繼續處理
2.2xx:成功,行爲被成功地接受、理解和採納
3.3xx:重定向,爲了完成請求,必須進一步執行的動做
4.4xx:客戶端錯誤,請求包含語法錯誤或者請求沒法實現
5.5xx:服務器錯誤,服務器不能實現一種明顯無效的請求

 

2、HTTP頭標

頭標由主鍵/值對組成。它們描述客戶端或者服務器的屬性、被傳輸的資源以及應該實現鏈接。

四種不一樣類型的頭標:

1.通用頭標:便可用於請求,也可用於響應,是做爲一個總體而不是特定資源與事務相關聯。
2.請求頭標:容許客戶端傳遞關於自身的信息和但願的響應形式。
3.響應頭標:服務器和於傳遞自身信息的響應。
4.實體頭標:定義被傳送資源的信息。便可用於請求,也可用於響應。

頭標格式:

    <name>:<value><CRLF>

下表描述在HTTP/1.1中用到的頭標 (刪減)
Accept

定義客戶端能夠處理的媒體類型,按優先級排序;
在一個以逗號爲分隔的列表中,能夠定義多種類型和使用通配符。例如:Accept: image/jpeg,image/png,*/*

Accept-Charset 

定義客戶端能夠處理的字符集,按優先級排序;
在一個以逗號爲分隔的列表中,能夠定義多種類型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8

Accept-Encoding     定義客戶端能夠理解的編碼機制。例如:Accept-Encoding:gzip,compress
Accept-Language    定義客戶端樂於接受的天然語言列表。例如:Accept-Language: en,de
Accept-Ranges

一個響應頭標,它容許服務器指明:將在給定的偏移和長度處,爲資源組成部分的接受請求。
該頭標的值被理解爲請求範圍的度量單位。例如Accept-Ranges: bytes或Accept-Ranges: nonea

Age

容許服務器規定自服務器生成該響應以來所通過的時間長度,以秒爲單位。
該頭標主要用於緩存響應。例如:Age: 30

Contern-Type        標明發送或者接收的實體的MIME類型。例如:Content-Type: text/html
Server            一種標明Web服務器軟件及其版本號的頭標。例如:Server: Apache/2.0.46(Win32)
User-Agent

定義用於產生請求的軟件類型(典型的如Web瀏覽器)。
例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)

相關文章
相關標籤/搜索