HTTP

1. OSI 七層模型指什么?

  • 概念:OSI七層模型通過七個不同層次的結(jié)構(gòu)模型,使不同系統(tǒng)不同網(wǎng)絡(luò)能夠進行可靠的通訊。因此其最主要的功能就是幫助不同類型的主機實現(xiàn)數(shù)據(jù)傳輸 。完成中繼功能的節(jié)點通常稱為中繼系統(tǒng)。在OSI七層模型中,處于不同層的中繼系統(tǒng)具有不同的名稱。
  • 層次:物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會話層,表示層,應(yīng)用層:
    七層模型
  • 物理層:利用傳輸介質(zhì)為數(shù)據(jù)鏈路層提供物理連接,實現(xiàn)比特流的透明傳輸。
  • 數(shù)據(jù)傳輸層:通過各種控制協(xié)議,將有差錯的物理信道變?yōu)闊o差錯的、能可靠傳輸數(shù)據(jù)幀的數(shù)據(jù)鏈路。
  • 網(wǎng)絡(luò)層:通過路由選擇算法,為報文或分組通過通信子網(wǎng)選擇最適當(dāng)?shù)穆窂健?/li>
  • 傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
  • 會話層:向兩個實體的表示層提供建立和使用連接的方法。將不同實體之間的表示層的連接稱為會話。
  • 表示層:處理用戶信息的表示問題,如編碼、數(shù)據(jù)格式轉(zhuǎn)換和加密解密。
  • 應(yīng)用層:直接向用戶提供服務(wù),完成用戶希望在網(wǎng)絡(luò)上完成的各種工作。
  • 概括:簡言之,下4層,主要完成通信子網(wǎng)的功能,而上3層,主要完成資源子網(wǎng)的功能。

參考OSI七層模型詳解

2. HTTP 的工作原理是什么?

  • 對輸入的地址進行解析,從中解析出協(xié)議名,主機名,端口號,對象路徑等;
  • 封裝HTTP請求報文;
  • 封裝成TCP包,進行TCP連接;
  • 客戶機發(fā)送請求命令;
  • 服務(wù)器收到請求報文,處理報文,返回響應(yīng)內(nèi)容和響應(yīng)報文;
  • 服務(wù)器關(guān)閉TCP連接(可以通過Connection: keep-alive保持存在路線,但是連接斷開狀態(tài));
  • 客戶機收到響應(yīng)報文和響應(yīng)內(nèi)容,解析渲染呈現(xiàn)。

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

  • URI:統(tǒng)一資源標識符;
  • URL:統(tǒng)一資源定位符;
  • 區(qū)別
    URI&URL

    可以看出,URL是URI的子集,統(tǒng)一資源標識符有多種形式,URL只是其中的比較常用的一部分。
  • 格式<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<hash>
  • <scheme>:協(xié)議,常見的有http,https,ftp;
  • <user>:<password>:user和password現(xiàn)在不常見了,不會在URL明文書寫用戶名和密碼了,都是通過登錄的方式;
  • <host>:主機可以是IP地址或者域名;
  • :<port>:端口號用來區(qū)分主機上的進程,方便找到web服務(wù)器,http默認是80;
  • <path>:path是資源的路徑,也就是存放位置,不一定和物理路徑完全對應(yīng),符合web服務(wù)器路由約定即可;
  • <params>:params,在一些協(xié)議中需要參數(shù)來訪問資源,例如ftp是二進制還是文本傳輸,參數(shù)是名值對,用分號隔開;
  • <query>:查詢語句,這個是get請求最常用的傳遞參數(shù)方式了 ?a=1&b=2&=3;
  • <hash>:hash也成為片段,設(shè)計為標識文檔的一部分,很多MVVM框架用作了路由功能;
  • 常見協(xié)議:http,https,ftp,ssh

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

  • GET:通常用于請求服務(wù)器發(fā)送某個資源;
  • POST:向服務(wù)器發(fā)送數(shù)據(jù),通常用來支持HTML的表單(input,textarea,select),表單中的數(shù)據(jù)會被發(fā)送到服務(wù)器;
  • HEAD:HEAD方法和GET類似,但是在服務(wù)器的響應(yīng)中沒有資源的內(nèi)容,只有資源的一些基本信息,主要用于:
  • 在不獲取資源的情況下獲取資源信息(類型、大小等);
  • 通過狀態(tài)碼產(chǎn)看資源是否存在;
  • 通過查看首部,測試資源是否被修改了;
  • PUT:和GET從服務(wù)器獲取資源相反,PUT用于想服務(wù)器寫入資源,出于安全原因,并不是所有的服務(wù)器都實現(xiàn);
  • TRACE:客戶端發(fā)送一個請求的時候,這個請求可能會穿過防火墻、代理、網(wǎng)關(guān)和一些其它應(yīng)用程序,沒個中間節(jié)點都可能修改HTTP請求,TRACE方法允許客戶端在最終請求發(fā)往服務(wù)器的時候,看看它變成了什么樣子;
  • DELETE:DELETE方法用于要求服務(wù)器刪除請求的URL,和PUT一樣,出于安全考慮,服務(wù)器可能會不支持
  • OPTIONS:用于請求 web服務(wù)器告知其支持的各種功能。

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

  • 200:請求成功;
  • 301:重定向,新的URL在Location頭中給出,瀏覽器應(yīng)該自動地訪問新的URL;
  • 304:未變更,原來緩沖的文檔還可以繼續(xù)使用;
  • 403:無權(quán)訪問,資源不可用。服務(wù)器理解客戶的請求,但拒絕處理它;
  • 404:未找到,無法找到指定位置的資源;
  • 500:服務(wù)器遇到了意料不到的情況,不能完成客戶的請求;
  • 503:服務(wù)器超負載或停機維護。

6. 報文有哪幾部分組成?

  • 請求報文
  • 請求行
  • 請求頭
  • 空行
  • 請求體
  • 響應(yīng)報文
  • 狀態(tài)行
  • 響應(yīng)頭
  • 空行
  • 響應(yīng)體
  • eg
    報文

    其中的MIME Fields就是空行和響應(yīng)體(或空行和請求體)的位置。

7. 請求頭的格式和作用是什么?給個范例截圖說明

請求頭
  • 格式:關(guān)鍵字:值對
  • 作用
  • Accept:告訴服務(wù)器能夠發(fā)送那些媒體類型;
  • Accept-Encoding:告訴服務(wù)器能夠發(fā)送哪些壓縮格式;
  • Connection:客戶端和服務(wù)器是否保持連接;
  • Host:接收請求的服務(wù)器的主機名和端口號;
  • Origin:請求的網(wǎng)站源信息;
  • Referer:提供了包含當(dāng)前請求URI的文檔的URL,告訴服務(wù)器自己來源;
  • User-Agent:發(fā)起請求的客戶端應(yīng)用程序。

8. 首部的格式和作用是什么?給個范例截圖說明

首部
  • 格式:關(guān)鍵字:值對
  • 作用
  • Request:請求的URL;
  • Request Method:請求的方法;
  • Status Code:狀態(tài)碼和狀態(tài)短語;
  • Remote Address:服務(wù)器的IP地址和端口號。

9. 主體的作用是什么?給個范例

主體

主體就是客戶端和服務(wù)器傳輸?shù)暮诵膬?nèi)容,通常是querystring或文本,有的可以是json,而圖片是二進制碼。

10. 簡述瀏覽器緩存是如何控制的?

web緩存流程圖
  • 瀏覽器緩存機制,其實就是HTTP協(xié)議定義的緩存機制和HTML的Meta標簽緩存黁機制。
  • 如果瀏覽器請求時,沒有緩存,則向服務(wù)器請求內(nèi)容,通過緩存機制判斷是否需要緩存。
  • 如果瀏覽器請求時,存在緩存,那么首先看緩存是否在有效期,這里是通過HTTP的Cache-control和Expires指明的有效期,Cache-control優(yōu)先級較高,設(shè)置更加精細,是HTTP1.1新定義的。不過兩者的作用大體相同。
  • 如果沒過期則讀取緩存,如果緩存過期了,那么會查詢其他定義:
  • Last-Modified/If-Modified-Since要配合Cache-Control使用。
    • Last-Modified:標示這個響應(yīng)資源的最后修改時間。web服務(wù)器在響應(yīng)請求時,告訴瀏覽器資源的最后修改時間。
    • If-Modified-Since:當(dāng)資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務(wù)器請求時帶上頭 If-Modified-Since,表示請求時間。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-Modified-Since 則與被請求資源的最后修改時間進行比對。若最后修改時間較新,說明資源又被改動過,則響應(yīng)整片資源內(nèi)容(寫在響應(yīng)消息包體內(nèi)),HTTP 200;若最后修改時間較舊,說明資源無新修改,則響應(yīng)HTTP 304 (無需包體,節(jié)省瀏覽),告知瀏覽器繼續(xù)使用所保存的cache。
  • Etag/If-None-Match也要配合Cache-Control使用。
    • Etag:web服務(wù)器響應(yīng)請求時,告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標識(生成規(guī)則由服務(wù)器覺得)。Apache中,ETag的值,默認是對文件的索引節(jié)(INode),大?。⊿ize)和最后修改時間(MTime)進行Hash后得到的。
    • If-None-Match:當(dāng)資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務(wù)器請求時帶上頭If-None-Match (Etag的值)。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-None-Match 則與被請求資源的相應(yīng)校驗串進行比對,決定返回200或304。

參考瀏覽器緩存機制

11. 下圖各個參數(shù)是什么意思?

  • General:概括信息,瀏覽器自動生成概括,不是HTTP協(xié)議的內(nèi)容;
  • Request URL:請求的URL地址;
  • Request Method:請求的方法;
  • Status Code:響應(yīng)的狀態(tài)碼和狀態(tài)短語;
  • Remote Address:請求的IP地址和端口號;
  • Response Headers:響應(yīng)頭部;
  • Connection:連接狀態(tài),每次請求完成后都會關(guān)閉HTTP連接,為了優(yōu)化訪問,默認設(shè)置keep-alive保持連接,即TCP/IP連接不關(guān)閉;
  • Content-Length:內(nèi)容長度;
  • Content-Type:內(nèi)容類型,這里是json類型;
  • Date:響應(yīng)事件,這里是GMT國標時間;
  • Server:服務(wù)器應(yīng)用軟件信息;
  • X-Powered-By:告知網(wǎng)站是用何種語言或框架編寫的;
  • Request Headers:請求頭部;
  • Accept:能夠接受的響應(yīng)體格式,/表示任何格式均可;
  • Accept-Encoding:能夠接受的編碼格式;
  • Accept-Language:能夠接受的語言,zh-CN是簡體中文,q=0.8是權(quán)重0.8,優(yōu)先考慮簡體中文;
  • Cookie:緩存;
  • Host:服務(wù)器主機名;
  • Origin:源;
  • Referer:網(wǎng)站的來源信息,包括歷史記錄信息;
  • User-Agent:客戶端代理信息;
  • X-Requested-With:判斷是Ajax請求還是HTTP傳統(tǒng)請求;
  • Form-Data:從querystring中得到的表單數(shù)據(jù);
  • article:數(shù)據(jù)的文章標題。

本文歸本人和饑人谷所有,如需轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容