? 應(yīng)用范圍
Web的應(yīng)用層協(xié)議是Http.
Http協(xié)議并不規(guī)定瀏覽器如何解析HTML頁面,僅僅是制定了Http客戶機(jī)與Http服務(wù)器之間的數(shù)據(jù)傳輸規(guī)則。
用戶可以通過設(shè)置瀏覽器來控制并行連接數(shù)。大部分瀏覽器默認(rèn)開啟5~10個(gè)連接數(shù)。每個(gè)連接處理一個(gè)請求——響應(yīng)事物。
實(shí)現(xiàn)
Http由兩部分程序?qū)崿F(xiàn):一個(gè)Client程序和一個(gè)Server程序
這兩部分程序運(yùn)行于不同的端系統(tǒng)中,通過交換HTTP報(bào)文進(jìn)行會(huì)話。?
HTTP制定了報(bào)文的格式以及報(bào)文的交換過程。
Web瀏覽器實(shí)現(xiàn)了Http協(xié)議的客戶端部分。Web服務(wù)器實(shí)現(xiàn)了HTTP協(xié)議的服務(wù)端部分。
流行的Web服務(wù)器有Apache 和 Microsoft IIS
Http協(xié)議的下層協(xié)議
Http的下層(傳輸層)支撐協(xié)議是TCP,而不是UDP。
Http是無狀態(tài)協(xié)議
- 服務(wù)器像客戶機(jī)發(fā)送被請求文件時(shí),不會(huì)記錄目的客戶機(jī)的任何信息。
- 客戶機(jī)在短時(shí)間內(nèi)重復(fù)請求同一個(gè)文件,服務(wù)器仍然會(huì)做出響應(yīng),并發(fā)送文件給客戶機(jī)。
- 基于上述兩點(diǎn)說明Http協(xié)議是無狀態(tài)的。
連接方式
非持久連接
開始通信之前先建立連接,完成數(shù)據(jù)傳輸以后,釋放連接
缺點(diǎn):1.必須為每個(gè)請求對象建立并維護(hù)一個(gè)全新的連接,客戶機(jī)和服務(wù)器必須為該連接分配TCP緩沖區(qū)和 變量,這嚴(yán)重增加了服務(wù)器的負(fù)擔(dān),一個(gè)服務(wù)器可能同時(shí)服務(wù)于成千上萬的客戶機(jī)。
2.每個(gè)對象的傳輸時(shí)延為兩個(gè)RTT,一個(gè)用于建立TCP連接,一個(gè)用于請求和接收一個(gè)對象。持久連接
相同客戶機(jī)與服務(wù)器之間的后續(xù)請求通過初次建立的那個(gè)連接(而不是重新創(chuàng)建連接)。
如果一個(gè)連接經(jīng)過一定的時(shí)間間隔(一個(gè)可配置的時(shí)間)仍未被使用過, HTTP服務(wù)器會(huì)關(guān)閉該連接。
HTTP服務(wù)器默認(rèn)就是使用了流水線方式的持久連接。
RTT
從客戶機(jī)請求HTML頁面開始到用戶端進(jìn)程接收到完整的HTML頁面為止的整個(gè)往返時(shí)間(Round-Trip Time)
TCP三次握手
1.客戶機(jī)向服務(wù)器發(fā)送一個(gè)小的TCP報(bào)文段
2.服務(wù)器用一個(gè)小的TCP報(bào)文段作出確認(rèn)和響應(yīng)
3.客戶機(jī)向服務(wù)器返回確認(rèn)
一個(gè)RTT等于三次握手中前兩部分消耗的時(shí)間。
完成三次握手的前兩部分以后,客戶機(jī)將三次握手第三個(gè)部分與一個(gè)Http請求報(bào)文結(jié)合起來發(fā)送到該TCP連接。
一旦請求到達(dá)TCP服務(wù)器,服務(wù)器向該TCP連接發(fā)送HTML文件。該Http請求又耗掉一個(gè)RTT.
Http報(bào)文格式
[RFC 2616]定了HTTP報(bào)文格式。
Http報(bào)文格式共有兩種:
- 請求報(bào)文格式
示例:
GET /somedir/page.html HTTP/1.1
HOST: www.someschool.edu
connection:close
User-agent:Mozilla/4.0
Accept-language:fr
說明:
1.此報(bào)文格式第一行被稱作請求行
2.請求行的第一個(gè)字段是方法字段 用于指定發(fā)送請求的方法,這里的方法是GET,
還有其他方法如POST HEAD PUT DELETE
3.絕大多數(shù)HTTP請求使用GET方法
4.在URL字段填寫請求對象的URL
5.最后一個(gè)字段指定了瀏覽器實(shí)現(xiàn)的HTTP協(xié)議的版本,這里是1.1版本
6.第二行指定了目的主機(jī)
7.User-agent這一行用來指定用戶代理,即向服務(wù)器發(fā)送請求的瀏覽器類型,這一行可以幫助服務(wù)器為不同類型的瀏覽器返回不同版本的對象。
8.最后一行指定了對象的法語版本,如果服務(wù)器中有這樣的對象,否則使用服務(wù)器的默認(rèn)版本
9.首部行之后是實(shí)體主體。使用GET方法時(shí),實(shí)體主體為空,使用POST方法時(shí)實(shí)體主體才有內(nèi)容。
- 響應(yīng)報(bào)文格式
HTTP/1.1 200 OK // 初始化狀態(tài)行
Connection:close // 報(bào)文發(fā)送完成之后關(guān)閉了TCP連接
Date:Thu, 03 Jul 2003 12:00:15 GMT // 從服務(wù)器文件系統(tǒng)中檢索到文件并加入到響應(yīng)報(bào)文開始發(fā)送的時(shí)間
Server:Apache/1.3.0 (Unix) // 服務(wù)器類型
Last-Modified:Sun, 6 May 2007 09:23:24 GMT // 對象創(chuàng)建或者最后修改的時(shí)間
Content-Length:6821 // 被發(fā)送對象的字節(jié)數(shù)
Content-Type:text/html // 對象的類型
(data data data) // 實(shí)體主體
- 常見響應(yīng)狀態(tài)碼
200 Ok:請求成功。信息包含在返回的響應(yīng)報(bào)文中
301 moved Permanently:請求的對象已經(jīng)被永久轉(zhuǎn)移了,新的URL定義在響應(yīng)報(bào)文的Location:首部行中指定,客戶機(jī)軟件自動(dòng)用新的URL請求此對象
400 Bad Request:一個(gè)通用的差錯(cuò)代碼,指示該請求不能被服務(wù)器理解
404 Not Found:被請求的文檔不在服務(wù)器上
505 Http Version Not Supported:服務(wù)器不支持請求報(bào)文的協(xié)議版本
示例1:
請求命令:
telnet cis.poly.edu 80
GET /~ross/ HTTP/1.1
Host:cis.poly.edu
響應(yīng)報(bào)文:
HTTP/1.1 301 Moved Permanently
Date: Thu, 01 Oct 2015 02:31:56 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.31
Location: http://nyu.edu/projects/keithwross/
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
ef
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
The document has moved <A >here</A>.<P>
</BODY></HTML>
0
Connection closed by foreign host.
示例2:
請求命令:
telnet cis.poly.edu 80
HEAD /banana/ HTTP/1.1
Host:cis.poly.edu
響應(yīng)報(bào)文:
HTTP/1.1 404 Not Found
Date: Thu, 01 Oct 2015 02:37:03 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.31
Content-Type: text/html; charset=iso-8859-1
Connection closed by foreign host.
Cookie
-
Web站點(diǎn)通常希望能夠識(shí)別用戶。主要有以下兩個(gè)目的:
1.服務(wù)器想限制用戶的訪問2.服務(wù)器想把內(nèi)容與用戶身份關(guān)聯(lián)起來
基于上述的兩個(gè)原因,HTTP使用了Cookie
Cookie技術(shù)有四個(gè)組成部分
1.Http響應(yīng)報(bào)文中有一個(gè)Cookie首部行
2.Http請求報(bào)文中有一個(gè)Cookie首部行
3.在用戶端系統(tǒng)中保留有一個(gè)Cookie文件,由用戶的瀏覽器負(fù)責(zé)管理
4.在Web站點(diǎn)有一個(gè)后端數(shù)據(jù)庫建立Cookie的步驟:
1.瀏覽器首次訪問某個(gè)網(wǎng)站時(shí),請求發(fā)送到
Web緩存
Web緩存即代理服務(wù)器,能夠代表初始Web 服務(wù)器來滿足Http請求的網(wǎng)絡(luò)實(shí)體。Web緩存有自己的磁盤存儲(chǔ)空間,并在該存儲(chǔ)空間中保存最近請求過的網(wǎng)絡(luò)拷貝。
通過瀏覽器配置可以設(shè)置Web緩存,一旦配置了Web緩存,每個(gè)瀏覽器對一個(gè)對象的請求首先被定向到Web緩存器
-
Web緩存工作過程
1.瀏覽器建立一個(gè)到Web代理服務(wù)器的TCP連接,并向代理服務(wù)器發(fā)送一個(gè)請求
2.代理服務(wù)器檢查磁盤是否存儲(chǔ)了請求對象的拷貝。如果有,代理服務(wù)器用此對象回應(yīng)請求。
3.如果代理服務(wù)器沒有緩存這個(gè)對象,代理服務(wù)器會(huì)于該請求的初始服務(wù)器建立一個(gè)TCP連接,代理服務(wù)器把請求轉(zhuǎn)發(fā)給初始化服務(wù)器,初始服務(wù)器向Web代理服務(wù)器做出響應(yīng),并返回請求對象給代理服務(wù)器。
4.代理服務(wù)器接收到響應(yīng)的對象以后在自己的磁盤上建立一份拷貝,同時(shí)用Http響應(yīng)報(bào)文向發(fā)出請求的客戶機(jī)瀏覽器發(fā)送該拷貝(通過最初建立的客戶機(jī)瀏覽器與代理服務(wù)器之間的TCP連接)。根據(jù)上述的特征,Web緩存器既是服務(wù)器也是客戶機(jī)。
部署Web緩存器的好處
1.在網(wǎng)絡(luò)上部署Web緩存器可以大大減少客戶機(jī)請求的響應(yīng)時(shí)間,尤其是客戶機(jī)與初始服務(wù)器之間的瓶頸帶寬遠(yuǎn)遠(yuǎn)低于客戶機(jī)與Web緩存器之間的瓶頸帶寬時(shí)更為明顯。如果客戶機(jī)與Web緩存器之間有一個(gè)高速連接,并且用戶請求的對象放在Web緩存器上(實(shí)際情況通常是這樣,則Web緩存器可以迅速將對象交付客戶機(jī))
2.Web緩存器可以大大減少一個(gè)機(jī)構(gòu)內(nèi)部網(wǎng)與因特網(wǎng)接入鏈路上的通信量。通過減少通信量,該機(jī)構(gòu)就不必急于增加帶寬,因此會(huì)降低成本。
3.Web緩存器能從整體上大大降低因特網(wǎng)上的Web流量,從而改善所有應(yīng)用的性能。
條件GET
- 條件GET是HTTP協(xié)議的一種請求方式。
- 為什么引入條件GET?
1.通過高速Web緩存請求的對象,是由Web緩存器首次向初始服務(wù)器請求的對象的拷貝。隨著時(shí)間的推移,該拷貝的原始版本可能已經(jīng)發(fā)生了很大的改變。為了保證客戶機(jī)請求到的數(shù)據(jù)是最新的,HTTP提供了條件GET這種機(jī)制,條件GET允許緩存器證實(shí)它所緩存的對象是否是最新的。 - 條件GET特點(diǎn):
如果請求報(bào)文使用GET方法,并且請求報(bào)文中含有If-modified-since:首部行。那么可以確定此請求報(bào)文是一個(gè)條件GET報(bào)文