http請求報文介紹

http請求報文介紹

HTTP報文是面向文本的,報文中的每一個字段都是一些ASCII碼串,各個字段的長度是不確定的。HTTP有兩類報文:請求報文和響應報文。

一、一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成

下圖給出了請求報文的一般格式。

http請求報文介紹

http請求報文介紹

以下逐步分析各個數據部分的作用。

1、請求行

請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。

例如打開路徑http://www.baidu.com/index.php,用火狐瀏覽器可以查看到請求報文為:

GET /index.php HTTP/1.1

因此用空格分隔之後得到的信息為

(1)請求方法: GET

(2)URL信息: /index.php

(3)HTTP協議版本: HTTP/1.1

2、請求頭部

User-Agent:瀏覽器的具體類型 如:User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0

Accept:瀏覽器支持哪些數據類型 如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Charset:瀏覽器採用的是哪種編碼 如:Accept-Charset: ISO-8859-1

Accept-Encoding:瀏覽器支持解碼的數據壓縮格式 如:Accept-Encoding: gzip, deflate

Accept-Language:瀏覽器的語言環境 如:Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。Host:www.baidu.com

Connection:表示是否需要持久連接。Keep-Alive/close,HTTP1.1默認是持久連接,它可以利用持久連接的優點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現這一點,Servlet需要在應答中發送一個Content-Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,然後在正式寫出內容之前計算它的大小。如:Connection: Keep-Alive

Content-Length:表示請求消息正文的長度。對於POST請求來說Content-Length必須出現。

Content-Type:WEB服務器告訴瀏覽器自己響應的對象的類型和字符集。例如:Content-Type: text/html; charset=’gb2312’

Content-Encoding:WEB服務器表明自己使用了什麼壓縮方法(gzip,deflate)壓縮響應中的對象。例如:Content-Encoding:gzip

Content-Language:WEB服務器告訴瀏覽器自己響應的對象的語言。

Cookie:最常用的請求頭,瀏覽器每次都會將cookie發送到服務器上,允許服務器在客戶端存儲少量數據。

Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。服務器能知道你是從哪個頁面過來的。Referer: http://www.baidu.com/

3.空行

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

4.請求數據

請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。

二、HTTP響應報文

HTTP響應報文與HTTP請求報文是對應的,也是分為三個部分。

1、響應行

2、響應頭

3、響應體

HTTP/1.1 200 OK  //響應行
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
http請求報文介紹

http請求報文介紹

HTTP響應報文常用屬性:

Cache-Control

響應輸出到客戶端後,服務端通過該報文頭屬告訴客戶端如何控制響應內容的緩存。

下面,的設置讓客戶端對響應內容緩存3600秒,也即在3600秒內,如果客戶再次訪問該資源,直接從客戶端的緩存中返回內容給客戶,不要再從服務端獲取(當然,這個功能是靠客戶端實現的,服務端只是通過這個屬性提示客戶端“應該這麼做”,做不做,還是決定於客戶端,如果是自己宣稱支持HTTP的客戶端,則就應該這樣實現)。

Cache-Control: max-age=3600

ETag

一個代表響應服務端資源(如頁面)版本的報文頭屬性,如果某個服務端資源發生變化了,這個ETag就會相應發生變化。它是Cache-Control的有益補充,可以讓客戶端“更智能”地處理什麼時候要從服務端取資源,什麼時候可以直接從緩存中返回響應。

ETag: “737060cd8c284d8af7ad3082f209582d”

Location

我們在Asp.net中讓頁面Redirect到一個某個A頁面中,其實是讓客戶端再發一個請求到A頁面,這個需要Redirect到的A頁面的URL,其實就是通過響應報文頭的Location屬性告知客戶端的,如下的報文頭屬性,將使客戶端redirect到iteye的首頁中:

Location: http://www.google.com.hk

Set-Cookie

服務端可以設置客戶端的Cookie,其原理就是通過這個響應報文頭屬性實現的。

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

HTTP響應體:如果請求的是HTML頁面,那麼返回的就是HTML代碼。如果是JS就是JS代碼。

HTTP響應頭:而設置Cookie,緩存等信息就是在響應頭屬性設置的。

HTTP響應行:主要是設置響應狀態等信息。

都看到這了,轉發一下吧,關注並私信“前端資源”有小驚喜哦


分享到:


相關文章: