[HTTP][概述][一][學(xué)習(xí)筆記]
1.HTTP概述

超文本傳輸協(xié)議(HTTP)是一個用于傳輸超媒體文檔(例如HTML)的應(yīng)用層協(xié)議。它是為Web瀏覽器與Web服務(wù)器之間的通信而設(shè)計的。HTTP遵循CS模型,客戶端打開一個連接以發(fā)出請求,然后等待直到收到服務(wù)器端響應(yīng)。HTTP是無狀態(tài)協(xié)議,這意味著服務(wù)器不會在兩個請求之間保留任何數(shù)據(jù)(狀態(tài))。盡管通常基于TCP/IP層,但它可以在任何可靠的傳輸層上使用,也就是說,該協(xié)議不像UDP那樣靜默丟失消息。RUDP(UDP可靠化升級版本)是合適的替代選擇。
Web棧的層次結(jié)構(gòu)圖
客戶端和服務(wù)端交換各自消息進行交互。瀏覽器發(fā)出requests,服務(wù)端響應(yīng)responses。
2.基于HTTP的組件系統(tǒng)
HTTP是cs協(xié)議:請求通過一個實體發(fā)出,實體就是用戶代理。一般指瀏覽器,但也可以是爬蟲之類的。
每個發(fā)到服務(wù)器的請求,都會被服務(wù)器處理并返回一個消息(response)。在請求與響應(yīng)之間有很多稱為proxies的實體,比如網(wǎng)關(guān)、緩存等。
2.1.客戶端:user-agent
user-agent就是能為用戶發(fā)起行為的工具。通常指瀏覽器。瀏覽器總是作為發(fā)起一個請求的實體,要展現(xiàn)一個網(wǎng)頁,瀏覽器首先發(fā)送一個請求來獲取頁面的HTML文檔,在解析文檔中的資源信息發(fā)送其他請求,獲取腳本或CSS進行布局渲染以及其他圖片視頻等。然后,瀏覽器將這些資源整合起來,形成網(wǎng)頁。
一個網(wǎng)頁就是一個超文本文檔。其中一部分顯示的文本可能是鏈接,點擊它能獲取一個新頁面。瀏覽器負責(zé)發(fā)送HTTP請求,并進一步解析HTTP返回的消息,以向用戶提供明確的響應(yīng)。
2.2.Web服務(wù)端
Web Sever來服務(wù)并提供客戶端所請求的文檔。Server可以代表服務(wù)器,也可以是一種軟件,通過向其他計算機(緩存,數(shù)據(jù)庫服務(wù)器等)發(fā)起請求來獲取資源。
2.3.代理(Proxies)
在瀏覽器和服務(wù)器之間,有很多計算機和其他設(shè)備轉(zhuǎn)發(fā)了HTTP消息。由于Web棧層次結(jié)構(gòu)的原因,大多出現(xiàn)在傳輸層、網(wǎng)絡(luò)層和物理層上。還有一部分在應(yīng)用層上,被稱為代理(Proxies)。代理可以為透明,也可以不透明("改變請求"會通過他們)。代理主要作用由:
緩存(可以是公開的也可以是私有的,像瀏覽器的緩存)
過濾(像反病毒掃描,家長控制等)
負載均衡(讓多個服務(wù)器服務(wù)不同的請求)
認證(對不同資源進行權(quán)限管理)
日志記錄(允許存儲歷史信息)
3.HTTP的基本特質(zhì)
3.1.HTTP是簡單的
HTTP被設(shè)計得簡單易讀,報文能夠被人都懂,還允許簡單測試,降低了門檻。
3.2.HTTP是可拓展的
在HTTP/1.0中出現(xiàn)的HTTP headers讓協(xié)議擴展變得非常容易。只要服務(wù)端和客戶端就新 headers 達成語義一致,新功能就可以被輕松加入進來。
3.3.HTTP是無狀態(tài),有會話的
HTTP是無狀態(tài)的:在同一個連接中,兩個執(zhí)行成功的請求之間是沒有關(guān)系的。這樣會帶來一個問題,用戶沒有辦法在同一個網(wǎng)站中進行連續(xù)的交互,比如在購物網(wǎng)站,用戶添加了購物車,切換到另一個頁面后再添加購物車,這兩次添加購物車沒有任何關(guān)聯(lián),瀏覽器無法知道用戶選了什么商品。使用HTTP的頭部擴展,HTTP Cookies可以解決這個問題。把Cookies添加到頭部中,創(chuàng)建一個會話讓每次請求都能共享相同的上下文信息,達到相同的狀態(tài)。HTTP本質(zhì)無狀態(tài),使用Cookies創(chuàng)建有狀態(tài)會話。
3.4.HTTP和連接
一個連接是傳輸層控制的,不屬于HTTP范圍。HTTP并不需要底層的傳輸層協(xié)議是面向連接的,只需要它是可靠的或不丟失消息的(出錯會返回錯誤)。在互聯(lián)網(wǎng)中兩個最常用的協(xié)議:TCP是可靠的,UDP不可靠。因此,HTTP依賴于面向連接的TCP進行消息傳遞,但連接不是必須的。
在客戶端與瀏覽器交互之前,必須在兩者之間建立一個TCP鏈接,打開一個TCP連接需要多次交換消息(很耗時)。為了減輕這些缺陷,HTTP通過在一個連接復(fù)用消息的方式來讓這個連接始終保持為暖連接。為了更好的適合HTTP,設(shè)計一種更好傳輸協(xié)議的進程一直在進行。
4.HTTP能控制什么
4.1.緩存
通過HTTP來控制文檔如何緩存。服務(wù)端能告訴代理和客戶端哪些文檔需要被緩存,緩存多久,客戶端也能夠命令中間的緩存代理來忽略存儲的文檔。
4.2.開放同源限制
為了防止隱私泄露,瀏覽器強制對Web網(wǎng)站做了分割限制。只有來自于相同來源的網(wǎng)頁才能夠獲取網(wǎng)站的全部信息。HTTP可以通過修改頭部來開放這樣的限制,因此Web文檔可以是由不同域下的信息拼接成的。
4.3.認證
一些頁面被保護起來只讓特定用戶訪問。基本的認證功能可以直接通過HTTP提供,使用Authenticate相似頭部或者HTTP Cookies設(shè)置指定會話。
4.4.代理和隧道
一般情況下服務(wù)器或客戶端是出于內(nèi)網(wǎng)的,對外網(wǎng)隱藏真實IP。因此HTTP請求就要通過代理越過這個網(wǎng)絡(luò)屏障。但不是代理都是HTTP代理。比如,SOCKS協(xié)議代理就運行在更底層,一些像FTP這樣的協(xié)議都能夠被它們處理。
4.5.會話
使用HTTP Cookies允許用一個服務(wù)端的狀態(tài)發(fā)起請求,創(chuàng)建會話。基本的HTTP是無狀態(tài)的協(xié)議。不僅僅可以應(yīng)用到像購物車這樣的電商業(yè)務(wù)上,任何網(wǎng)站都可以為用戶定制顯示內(nèi)容。
5.HTTP流
當(dāng)客戶端和服務(wù)端進行交互時要經(jīng)過以下幾步:
打開TCP連接:TCP連接用來發(fā)送一條或多條請求,以及接受響應(yīng)消息。客戶端可能打開一條新的連接或重用已經(jīng)存在的連接,也可能開幾個連接。
發(fā)送一個HTTP報文:報文被封裝在幀中。
讀取服務(wù)端返回的報文信息
關(guān)閉連接或為后續(xù)請求重用連接。
6.HTTP報文
有兩種HTTP報文類型,請求與響應(yīng)。
6.1.請求
HTTP的method,經(jīng)常是由一個動詞像GET, POST 或者一個名詞像OPTIONS,HEAD來定義客戶端的動作行為。通常客戶端的操作都是獲取資源(GET方法)或者發(fā)送HTML form表單(POST方法),雖然在一些情況下也會有其他操作。
path,路徑
accept-encoding,接受的編碼
accept-language,接受的語言
6.2.響應(yīng)
7.基于HTTP的APIs
基于HTTP的最常用API是XMLHttpRequest API,可用于在user agent和服務(wù)器之間交換數(shù)據(jù)。 現(xiàn)代Fetch API提供相同的功能,具有更強大和靈活的功能集。
另一種API,即服務(wù)器發(fā)送的事件,是一種單向服務(wù),允許服務(wù)器使用HTTP作為傳輸機制向客戶端發(fā)送事件。使用EventSource接口,客戶端打開連接并建立事件句柄。 客戶端瀏覽器自動將到達HTTP流的消息轉(zhuǎn)換為適當(dāng)?shù)腅vent對象,并將它們傳遞給專門處理這類type事件的句柄,如果有這么個句柄的話。但如果相應(yīng)的事件處理句柄根本沒有建立,那就交給onmessage (en-US)事件處理程序處理。
HTTP TCP/IP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。