Http協議解讀(一)

1.2 http

超文本傳輸協議。詳細規定了瀏覽器和萬維網之間的通信規則。規定了客戶端發送給服務器的內容格式,也規定了服務器發送給客戶端的內容格式。

1.2.1 請求頭:

1. Referer:請求從那個頁面發出

在頁面上點擊超鏈接或提交表單,都會有這個請求頭。

如果在瀏覽器的地址欄中直接發請求,那麼就沒有這個請求頭。

**作用:**

統計工作:可以統計訪問來源是從哪裡發出!例如統計多少訪問來自baidu。

防盜鏈:下載本站資源,要查看是否Referer來自本站,如果不是那麼就是盜鏈!

2. Content-Type:application/x-www-from/urlencoded (請求體使用了URL編碼)

它說明的請求體的類型!!!

這個頭只有POST請求才有,而且默認值就是:application/x-www-form/urlencoded。

3. Content-Length:13

只有POST請求才有這個頭 。

它說明的是請求體的字節數!

1.2.2 響應頭

Last-Modified:最後的修改時間

禁用瀏覽器緩存

Expires:-1

Cache-Control:no-cache

Pragma:no-cache

自動刷新=====>Refresh: 3 ;url=http://www.itcast.cn;

瀏覽器會在3秒之後請求http://www.itcast.cn

1.2.3 http協議的格式及內容

POST 請求是可以有請求體,GET 請求不能有請求體

格式:

請求首行;

請求頭信息;

空行;

請求體;

GET請求:

**GET /hello/index.jsp HTTP/1.1**

**Host**: localhost

**User-Agent:** Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0

*Accept:** text/html,application/xhtml+xml,application/xml;q=0.9,`/*`;q=0.8

**Accept-Language:** zh-cn,zh;q=0.5

**Accept-Encoding:** gzip, deflate

*Accept-Charset:** GB2312,utf-8;q=0.7,;q=0.7

**Connection:** keep-alive

**Cookie:** JSESSIONID=369766FDF6220F7803433C0B2DE36D98

-------此處是空行------

內容解讀:

GET:GET請求,請求服務器路徑/hello/...,協議為1.1版

Host:請求的主機名 localhost

User-Agent:與瀏覽器和 OS相關的信息。有些網站顯示用戶系統版本和瀏覽器版本,都是通

過 User-Agent 頭信息來獲取的。

Accept:告訴服務器,當前客戶端可以接收文檔類型 */*代表什麼都可以接收

Accept-Language:當前客戶端支持的語言

Accept-Encoding:支持的壓縮格式。數據在網絡上傳遞時,可能服務器會把數據壓縮再發送

Accept-Charset:客戶端支持的編碼

Connection:客戶端支持的鏈接方式,keep-alive:保持一段時間鏈接,默認 3000ms

Cookie:因為不是第一次訪問這個地址,所以會在請求中把上一次服務器響應中發送過來的

Cookie 在請求中一併發送過去,這個 Cookie 的名字 JSESSIONID。

POST請求:

**POST /hello/index.jsp HTTP/1.1**

*Accept**: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, `/*`

**Referer:** http://localhost:8080/hello/index.jsp

**Accept-Language:** zh-cn,en-US;q=0.5

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

**Content-Type**: application/x-www-form-urlencoded

**Accept-Encoding**: gzip, deflate

**Host**: localhost:8080

**Content-Length**: 13

**Connection**: Keep-Alive

**Cache-Control**: no-cache

**Cookie**: JSESSIONID=E365D980343B9307023A1D271CC48E7D

keyword=hello

內容解讀:

Referer:請求來自哪個頁面

Content-Type:表單的數據類型

Content-Length:請求體的長度

keyworf=hello:請求內容!hello 是在表單中輸入的數據,keyword 是表單字段的名字

1.2.4 Http 響應格式及內容

格式:

響應首行;

響應頭信息;

空行;

響應體;

響應內容:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/html;charset=UTF-8

Content-Length: 724

Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello

Date: Wed, 25 Sep 2012 04:15:03 GMT

內容解讀:

響應協議為 HTTP1.1,狀態碼 200,表示請求成功 ,OK 是狀態碼的解釋。

Server:服務器的版本信息。

Content-Type:響應體使用的編碼

Content-Length:響應體字節

Set-Cookie:響應給客戶端的 Cookie

Date:相應的時間,這可能會有 8小時 的時區差

熟悉的響應碼:

200:請求成功,瀏覽器會把響應體內容顯示。

404:請求的資源沒有找到,客戶端請求不存在的資源,url 錯誤。

500:請求資源找到了,但服務器發生了錯誤。

302:重定向,服務器要求瀏覽器重新發送一個請求,服務器會發送一個響應頭 Location,他指定

新請求的URL

304:當用戶第一次請求index.html時,服務器會添加一個名為Last-Modified響應頭,這個頭說明了index.html的最後修改時間,瀏覽器會把index.html內容,以及最後響應時間緩存下來。當用戶第二次請求index.html時,在請求中包含一個名為If-Modified-Since請求頭,它的值就是第一次請求時服務器通過Last-Modified響應頭髮送給瀏覽器的值,即index.html最後的修改時間,If-Modified-Since請求頭就是在告訴服務器,我這裡瀏覽器緩存的index.html最後修改時間是這個,您看看現在的index.html最後修改時間是不是這個,如果還是,那麼您就不用再響應這個index.html內容了,我會把緩存的內容直接顯示出來。而服務器端會獲取If-Modified-Since值,與index.html的當前最後修改時間比對,如果相同,服務器會發響應碼304,表示index.html與瀏覽器上次緩存的相同,無需再次發送,瀏覽器可以顯示自己的緩存頁面,如果比對不同,那麼說明index.html已經做了修改,服務器會響應200。

!

1.2.5 Http 的三次握手?

TCP 傳輸控制協議。

TCP 是主機對主機層的傳輸控制協議,提供可靠地連接服務,採用三次握手建立一個連接。

位碼(即 tcp標誌):6種

SYN(建立聯機)、ACK(確認)、PSH(push 傳輸)、FIN(finish 結束)、RST(reset 重置)、

URG(urgent 緊急)、Sequence number(順序號碼)、Acknowledge number(確認號碼)

在 TCP/IP 協議中,TCP 協議提供可靠的連接服務,採用三次握手建立連接:

第一次握手:建立連接時,客戶端發送SYN包(syn=j)到服務器,進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到SYN包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),

即 SYN+ACK包,服務器進入SYN_RECV狀態。

第三次握手:客戶端收到服務器的 SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客

戶端和服務器進入ESTABLISHED狀態,完成三次握手。

Http協議解讀(一)


分享到:


相關文章: