web:
web使用應用層協議HTTP(端口號:80,使用的傳輸層協議為TCP),web由多個對象組成,一般若web包含html文本和5個圖片,則這個web有6(1+5)個對象。每個對象通過對應的URL進行引用。
HTTP服務器並不保存關於客戶機的任何信息,故稱HTTP為無狀態協議。即使客戶端在很短的時間內對同一對象進行請求,服務器也會進行反應。
非持久連接:
web每個對象的請求均建立一個獨立的TCP,但這些TCP可並行建立從而加快了響應速度。
例如:
①HTTP客戶機進程在端口80發起一個到服務器的TCP連接。
②HTTP客戶機通過socket向服務器發出一個請求報文,其中包含文件的路徑。
③HTTP服務通過socket接受請求並發送請求對象。
④HTTP服務器通知TCP並斷開連接,一般只有在數據傳輸完成后TCP才會斷開。
⑤HTTP客戶機接收響應報文並斷開TCP。
⑥對於非持久連接,要重復上面的過程發送每個對象。
持久連接:對於同一客戶機與服務器之間只建立一條TCP,所有對象由TCP傳輸。
RTT:round-trip time 往返時間。建立TCP連接要進行3次捂手,1.5個RTT。
HTTP請求報文:
方法字段 URL HTTP協議版本
GET /somedir/page.heml HTTP/1.1 //第一行為 請求行 request line 后面為首部行與實體部分
connection :close 非持久連接
user-agent :*** 客戶機使用的瀏覽器 首部行 header line
accept-language :*** 使用的語言
*****entity 實體部分*******
一般而言,使用GET方法時,實體部分為空。使用post方法時實體部分不是空。例如在客戶端向服務器提交密碼與用戶名是要使用post方法。向服務器提供數據時不一定使用post方法,例如可以使用擴展的get方法(利用表單生成的請求可以使用GET方法)
例如:www.s.com/animals?monkey&bananas 這個URL就攜帶了部分提交給服務器的數據。
HTTP響應報文:
HTTP/1.1 200(狀態碼) ok 狀態行
connection close 非持久連接
......data......
server**** 服務器類型
last-modefied 對象最后更改的時間,一般用於web緩存的更新依據 首部行 header line
content-length
content-type text/html
......data......
常見的狀態碼: 200 ok 請求成功
301 moved permanently 請求對象被永久的轉移了,並返回了對象存儲的新URL。
400 bad request 服務器無法理解的請求內容
404 not found 請求的內容不在服務器中。
505 HTTP version not supported
雖說HTTP是無狀態的,但可以使用cookie使服務器跟蹤用戶的動作。
cookie系統由四個部分組成:
①HTTP響應報文中有一個cookie首部行。
②HTTP請求報文中有一個cookie首部行。
③用戶系統中有一個cookie文件。
④在web站點有一個關於cookie的后端數據庫。
cookie標識碼由服務器產生,並用於服務器對端系統的身份識別,web系統可以使用cookie(設識別碼為12345)記錄用戶12345(系統不知道用戶的真實姓名)的行為,並通過這些數據對用戶做出一些反應,例如對用戶推薦一些產品。若將cookie識別碼與用戶的用戶名和密碼對應,則用戶在下次登錄系統是可以不用輸入用戶名和密碼。
cookie的一個爭議就是使用cookie可能會侵犯用戶的隱私。
web緩存器(web cache )也稱為web代理器(proxy server):
web cache即使客戶機也是服務器,當瀏覽器向web緩存發出請求時,web緩存為服務器,當web緩存向源web服務器請求數據時(緩存中缺少某些對象)其又是客戶機。
web cache可以是一台主機由ISP提供,也可以是本PC機上的一個通用的軟件。
web cache存在與源web sever 同步的問題,一般web緩存會在一定的時間里與源web server同步,同步時使用的是條件GET指令。