任務34-HTTP

1. OSI 七層模型指什么 (難度***)

OSI(Open System Interconnection,開放系統(tǒng)互連),七層網(wǎng)絡模型稱為開放式系統(tǒng)互聯(lián)參考模型,是一個邏輯上的定義,一個規(guī)范,它把網(wǎng)絡從邏輯上分為了7層。通過七個層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡之間實現(xiàn)可靠的通訊 。這七層由下往上可分為:

2. HTTP 的工作原理是什么? (難度***)

HTTP協(xié)議定義web客戶端如何從web服務器請求web頁面,以及服務器如何把web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應模型。客戶端向服務器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務器以一個狀態(tài)行作為響應,響應的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數(shù)據(jù)。下圖表明了這種請求/響應模型。


以下是HTTP請求/響應的步驟:
(1)客戶端連接到web服務器
一個HTTP客戶端,通常是瀏覽器,與web服務器的HTTP端口(默認80)建立一個TCP套接字連接。
(2)發(fā)送HTTP請求
通過TCP套接字,客戶端向web服務器發(fā)送一個文本的請求報文,一個請求報文交由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。
(3)服務器接收請求并返回HTTP響應
web拂去其解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態(tài)行、響應頭部、空行和響應數(shù)據(jù)4部分組成。
(4)釋放連接TCP連接
web服務器主動關閉TCP套接字,釋放TCP連接;客戶端被動關閉TCP套接字,釋放TCP連接。
(5)客戶端瀏覽器解析HTML內(nèi)容
客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)碼。然后解析每一個響應頭,響應頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數(shù)據(jù)HTML,根據(jù)HTML的預付對其進行格式化,并在瀏覽器窗口中顯示。

3. URI 的格式是什么?常見的協(xié)議有哪些 (難度***)

URI( Uniform Resource Identifier)統(tǒng)一資源標識符
格式:

  • 協(xié)議名方案
    定義Internet服務的類型。最常見的類型是http。
  • 登錄信息(認證)
    指定用戶名和密碼作為從服務器端獲取資源時必要的登錄信息,即身份認證。
  • 服務器地址
    使用URI必須指定帶訪問的服務器地址。地址可以是DNS可解析的名稱,也可以是IP地址。
  • 服務器端口號
    指定服務器連接的網(wǎng)絡端口號。一般情況下使用默認端口號。
  • 帶層次的文件路徑
    指定服務器上的文件路徑來定位特制的資源。
  • 查詢字符串
    針對已指定的文件路徑內(nèi)的資源,可以使用查詢字符串傳入任意參數(shù)。
  • 片段標識符
    使用片段標識符通常標記以獲取資源中的子資源。

常見協(xié)議:
IP(Internet Protocol):網(wǎng)絡協(xié)議
HTTP (HyperText Transfer Protocol):超文本傳輸協(xié)議
HTTPS(Hypertext Transport Protocol Server):超文本傳輸安全協(xié)議
ARP(Address Resolution Protocol):地址解析協(xié)議
FTP(File Transfer Protocol):文件傳輸協(xié)議
SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協(xié)議
SFTP(Simple File Transfer Protocol ):簡單文件傳輸協(xié)議
TCP(Transfer Control Protocol):傳輸控制協(xié)議
UDP(User Datagram Protocol):用戶數(shù)據(jù)包協(xié)議

4. HTTP 協(xié)議有幾種和服務器交互的方法 (難度***)

  • GET:最常用,通常用于請求服務器發(fā)送某個資源,我們平時在瀏覽器輸入網(wǎng)頁地址,就是給服務器發(fā)送了一個GET請求。
  • POST:用于向服務器發(fā)送數(shù)據(jù),通常用來支持HTML表單(input、select、textarea),表單中的數(shù)據(jù)會被發(fā)送到服務器。
  • HEAD:該方法與GET類似,只是不返回報文主體部分,用于確認URI的有效性及資源更新的日期時間等。
  • PUT:和GET從服務器獲取資源相反,PUT用于向服務器寫入資源;PUT的語義就是讓服務器用請求的主體部分創(chuàng)建一個請求URL命名的文檔,如果存在就替換;出于安全原因不是所有的服務器都能實現(xiàn)。
  • TRACE:該方法是讓WEB服務器端將之前的請求通信環(huán)回給客戶端的方法。可以用來確認連接過程中發(fā)生的一系列操作。
  • DELET:此方法用于要求服務器刪除請求的URL,和PUT一樣,服務器可能會不支持(刪除資源)。
  • OPTIONS:此方法用于請求 web服務器告知其支持的各種功能。

5. 狀態(tài)碼200,301,304,403,404,500,503分別代表什么意思 (難度****)

  • 200 OK:請求被成功地完成,所請求的資源發(fā)送回客戶端。
  • 301 Moved Permanently:客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
  • 304 Not Modified:客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用。
  • 403 Forbidden:對請求資源的訪問被服務器拒絕了。
  • 404 Not Found:請求所希望得到的資源在服務器上無法找到。
  • 500 Internal Server Error:服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。
  • 503 Service Unavailable:服務器暫時處于超負荷或正在進行停機維護,現(xiàn)在無法處理請求。

6. 報文有哪幾部分組成? (可選 難度****)

  • HTTP報文有兩類:
  • 請求端(客戶端)的HTTP報文叫做請求報文。
  • 響應端(服務端)的HTTP報文叫做響應報文。
  • HTTP報文大致可以分為報文首部和報文主體兩部分:
    • 請求報文:(報文首部+空行+報文主體)
    • 請求報文首部:
    • 請求行:(包含用于請求的方法、URI、HTTP版本)
    • 請求首部字段
    • 通用首部字段
    • 實體首部字段
    • 其他
    • 響應報文:(報文首部+空行+報文主體)
    • 響應報文首部:
    • 狀態(tài)行:(包含表明響應結(jié)果的狀態(tài)碼,HTTP版本)
    • 響應首部字段
    • 通用首部字段
    • 實體首部字段
    • 其他

7. 請求頭的格式和作用是什么?給個范例截圖說明 (可選 難度****)

請求頭

Host:URI信息
Accept:瀏覽器能接收的資源類型
Accept-Encoding:告訴服務器能夠發(fā)送哪些編碼
Accept-Language:告訴服務器能夠發(fā)送哪些語言
Cache-Control:緩存控制
Connection:客戶端和服務器是否保持連接
Cookie:瀏覽器緩存
User-Agent:HTTP客戶端程序的信息

8. 首部的格式和作用是什么?給個范例截圖說明 (可選 難度****)

首部包括:普通首部(General)、請求首部(Request Headers)、響應首部(Response Headers)。

首部
  • 普通首部:請求報文和響應報文雙方都會使用的首部。

首部 |描述
-------| ------| ------
Cache-Control| 控制緩存
Connection|控制不再轉(zhuǎn)發(fā)給代理的首部字段、管理持久連接
Data|創(chuàng)建HTTP報文的時間和日期
pragma|報文指令
Trailer|事先說明在報文主體后記錄了哪些首部字段,可以應用在HTTP1.1版本分塊傳輸編碼時使用。
Transfer-Encoding|規(guī)定了傳輸報文主體時采用的編碼方式
Upgrade|用于檢測HTTP協(xié)議及其他協(xié)議是否可以使用更高版本進行通信
Via|追蹤客戶端與服務器之間的請求響應和響應報文的傳輸途徑。還可以避免請求回環(huán)的發(fā)生。
Warning|告知用戶一些與緩存相關問題的警告

  • 請求首部:從客戶端往服務器端發(fā)送請求報文中所使用的首部。用于補充請求的附加信息、客戶端信息、對響應內(nèi)容相關優(yōu)先級等內(nèi)容。

首部 |描述
-------| ------| ------
Accept |用戶代理可處理的媒體類型
Accept-Charset |優(yōu)先的字符集
Accept-Encoding |優(yōu)先的內(nèi)容編碼
Accept-Language |優(yōu)先的語言(自然語言)
Authorization Web |認證信息
Expect |期待服務器的特定行為
From |用戶的電子郵箱地址
Host |請求資源所在服務器
If-Match |比較實體標記(ETag)
If-Modified-Since |比較資源的更新時間
If-None-Match |比較實體標記(與 If-Match 相反)
If-Range |資源未更新時發(fā)送實體 Byte 的范圍請求
If-Unmodified-Since |比較資源的更新時間(與If-Modified-Since相反)
Max-Forwards |最大傳輸逐跳數(shù)
Proxy-Authorization |代理服務器要求客戶端的認證信息
Range |實體的字節(jié)范圍請求
Referer |對請求中 URI 的原始獲取方
TE |傳輸編碼的優(yōu)先級
User-Agent |HTTP 客戶端程序的信息

  • 響應首部:從服務器端向客戶端返回響應報文時使用的首部。用于補充響應的附加信息、服務器信息,以及對客戶端的附加要求等信息。

首部 |描述
-------| ------| ------
Accept-Ranges|是否接受字節(jié)范圍請求
Age|推算資源創(chuàng)建經(jīng)過時間
ETag|資源的匹配信息
Location|令客戶端重定向至指定URI
Proxy-Authenticate|代理服務器對客戶端的認證信息
Retry-After|對再次發(fā)起請求的時機要求
Server|HTTP服務器的安裝信息
Vary|代理服務器緩存的管理信息
WWW-Authenticate |服務器對客戶端的認證信息

9. 主體的作用是什么?給個范例(可選 截圖說明難度****)

主體就是客戶端和服務端之間傳輸?shù)闹饕獌?nèi)容。
主體可以承載很多類型的數(shù)字數(shù)據(jù):圖片、視頻、HTML文檔、軟件應用程序等。


報文主體

10. 簡述瀏覽器緩存是如何控制的(可選 難度*****)

(1)緩存的分類
緩存分為服務端側(cè)(server side,比如 Nginx、Apache)和客戶端側(cè)(client side,比如 web browser)。
服務端緩存又分為 代理服務器緩存 和 反向代理服務器緩存(也叫網(wǎng)關緩存,比如 Nginx反向代理、Squid等),其實廣泛使用的 CDN 也是一種服務端緩存,目的都是讓用戶的請求走”捷徑“,并且都是緩存圖片、文件等靜態(tài)資源。
客戶端側(cè)緩存一般指的是瀏覽器緩存,目的就是加速各種靜態(tài)資源的訪問,想想現(xiàn)在的大型網(wǎng)站,隨便一個頁面都是一兩百個請求,每天 pv 都是億級別,如果沒有緩存,用戶體驗會急劇下降、同時服務器壓力和網(wǎng)絡帶寬都面臨嚴重的考驗。

(2)瀏覽器緩存控制機制有兩種:HTML Meta標簽 vs. HTTP頭信息
①HTML Meta標簽控制緩存
瀏覽器緩存機制,其實主要就是HTTP協(xié)議定義的緩存機制(如: Expires; Cache-control等)。但是也有非HTTP協(xié)議定義的緩存機制,如使用HTML Meta 標簽,Web開發(fā)者可以在HTML頁面的<head>節(jié)點中加入<meta>標簽,代碼如下:

<pre>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</pre>

上述代碼的作用是告訴瀏覽器當前頁面不被緩存,每次訪問都需要去服務器拉取。使用上很簡單,但只有部分瀏覽器可以支持,而且所有緩存代理服務器都不支持,因為代理不解析HTML內(nèi)容本身。而廣泛應用的還是 HTTP頭信息 來控制緩存,下面我主要介紹HTTP協(xié)議定義的緩存機制。
②HTTP頭信息控制緩存

  • 瀏覽器請求流程
瀏覽器第一次請求

瀏覽器再次請求
  • 控制緩存策略:
    Expires :Expires是Web服務器響應消息頭字段,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數(shù)據(jù),而無需再次請求。不過Expires 是HTTP 1.0的東西,現(xiàn)在默認瀏覽器均默認使用HTTP 1.1,所以它的作用基本忽略。Expires 的一個缺點就是,返回的到期時間是服務器端的時間,這樣存在一個問題,如果客戶端的時間與服務器的時間相差很大(比如時鐘不同步,或者跨時區(qū)),那么誤差就很大,所以在HTTP 1.1版開始,使用Cache-Control: max-age=秒替代。
    Cache-control:Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請求到服務器取數(shù)據(jù)。只不過Cache-Control的選擇更多,設置更細致,如果同時設置的話,其優(yōu)先級高于Expires。
    Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。

    • Last-Modified:標示這個響應資源的最后修改時間。web服務器在響應請求時,告訴瀏覽器資源的最后修改時間。
    • If-Modified-Since:當資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務器請求時帶上頭 If-Modified-Since,表示請求時間。web服務器收到請求后發(fā)現(xiàn)有頭If-Modified-Since 則與被請求資源的最后修改時間進行比對。若最后修改時間較新,說明資源又被改動過,則響應整片資源內(nèi)容(寫在響應消息包體內(nèi)),HTTP 200;若最后修改時間較舊,說明資源無新修改,則響應HTTP 304 (無需包體,節(jié)省瀏覽),告知瀏覽器繼續(xù)使用所保存的cache。

    Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。

    • Etag:web服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識(生成規(guī)則由服務器決定)。Apache中,ETag的值,默認是對文件的索引節(jié)(INode),大小(Size)和最后修改時間(MTime)進行Hash后得到的。
    • If-None-Match:當資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match (Etag的值)。web服務器收到請求后發(fā)現(xiàn)有頭If-None-Match 則與被請求資源的相應校驗串進行比對,決定返回200或304。

11. 下圖各個參數(shù)是什么意思(可選 難度*****)

  • General
    Request URL: 請求的資源地址。
    Request Method: 請求的方式,此時為PUT。
    Status Code: 狀態(tài)碼,此時為200,成功。
    Remote Address: 請求的服務器的IP地址和端口號,此時為121.40.201.213:80。
  • Response Headers
    Connection: keep-alive: 使客戶端到服務器端的連接持續(xù)有效。
    Content-Length: Content-Length首部告訴瀏覽器報文中實體主體的大小。此時為12。
    Content-Type: 決定如何顯示返回的消息實體,此時是json格式。
    Date: 創(chuàng)建HTTP報文的時間和日期。
    Server: 服務器上使用的應用程序的信息,此時為nginx/1.6.2。
    X-Powered-By: 告訴HTTP客戶端處理請求和響應的是什么引擎,此時為Express。
  • Request Headers
    Accept: 用戶代理可處理的媒體類型。
    Accept-Encoding: 優(yōu)先的內(nèi)容編碼。
    Accept-Language: 優(yōu)先的語言(自然語言)。
    Connection: keep-alive: 使客戶端到服務器端的連接持續(xù)有效。
    Content-Length: Content-Length首部告訴瀏覽器報文中實體主體的大小。此時為56。
    Content-Type: 決定如何顯示返回的消息實體,此時設置編碼為UTF-8。
    Cookie: 瀏覽器緩存。
    Host: 使用的主機。
    Origin: 說明最初的請求時從哪里發(fā)出。
    Referer: 告訴瀏覽器頁面是從哪個頁面連接過來。
    User-Agent: HTTP客戶端程序的信息。
    X-Requested-With: 在服務器段判斷request來自Ajax請求(異步)還是傳統(tǒng)請求(同步)。此時為Ajax請求(異步)。

版權(quán)歸本人及饑人谷所有,轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內(nèi)容