HTTP原理

1. OSI 七層模型指什么

OSI(Open System Interconnection,開放系統(tǒng)互連)七層網(wǎng)絡(luò)模型稱為開放式系統(tǒng)互聯(lián)參考模型 ,是一個邏輯上的定義,一個規(guī)范,它把網(wǎng)絡(luò)從邏輯上分為了7層。每一層都有相關(guān)、相對應的物理設(shè)備,比如路由器,交換機。
OSI 七層模型是一種框架性的設(shè)計方法 ,建立七層模型的主要目的是為解決異種網(wǎng)絡(luò)互連時所遇到的兼容性問題,其最主要的功能使就是幫助不同類型的主機實現(xiàn)數(shù)據(jù)傳輸。
它的最大優(yōu)點是將服務、接口和協(xié)議這三個概念明確地區(qū)分開來,通過七個層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實現(xiàn)可靠的通訊。

image.png
image.png
image.png
image.png
image.png
  1. 物理層:主要定義物理設(shè)備標準,如網(wǎng)線的接口類型、光纖的接口類型、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉(zhuǎn)化為電流強弱來進行傳輸,到達目的地后在轉(zhuǎn)化為1、0,也就是我們常說的數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換)。這一層的數(shù)據(jù)叫做比特。

  2. 數(shù)據(jù)鏈路層:定義了如何讓格式化數(shù)據(jù)以進行傳輸,以及如何讓控制對物理介質(zhì)的訪問。這一層通常還提供錯誤檢測和糾正,以確保數(shù)據(jù)的可靠傳輸。

  3. 網(wǎng)絡(luò)層:在位于不同地理位置的網(wǎng)絡(luò)中的兩個主機系統(tǒng)之間提供連接和路徑選擇。Internet的發(fā)展使得從世界各站點訪問信息的用戶數(shù)大大增加,而網(wǎng)絡(luò)層正是管理這種連接的層。

  4. 傳輸層:定義了一些傳輸數(shù)據(jù)的協(xié)議和端口號(WWW端口80等),如:TCP(傳輸控制協(xié)議,傳輸效率低,可靠性強,用于傳輸可靠性要求高,數(shù)據(jù)量大的數(shù)據(jù))UDP( 用戶數(shù)據(jù)報協(xié)議 ,與TCP特性恰恰相反,用于傳輸可靠性要求不高,數(shù)據(jù)量小的數(shù)據(jù),如QQ聊天數(shù)據(jù)就是通過這種方式傳輸?shù)模?。主要是將從下層接收的?shù)據(jù)進行分段和傳輸,到達目的地址后再進行重組。常常把這一層數(shù)據(jù)叫做段。

  5. 會話層:通過傳輸層(端口號:傳輸端口與接收端口)建立數(shù)據(jù)傳輸?shù)耐?。主要在你的系統(tǒng)之間發(fā)起會話或者接受會話請求(設(shè)備之間需要互相認識可以是IP也可以是MAC或者是主機名)

  6. 表示層:可確保一個系統(tǒng)的應用層所發(fā)送的信息可以被另一個系統(tǒng)的應用層讀取。例如,PC程序與另一臺計算機進行通信,其中一臺計算機使用擴展二一十進制交換碼(EBCDIC),而另一臺則使用美國信息交換標準碼(ASCII)來表示相同的字符。如有必要,表示層會通過使用一種通格式來實現(xiàn)多種數(shù)據(jù)格式之間的轉(zhuǎn)換。

  7. 應用層: 是最靠近用戶的OSI層。這一層為用戶的應用程序(例如電子郵件、文件傳輸和終端仿真)提供網(wǎng)絡(luò)服務。

參考

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

以下是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服務器主動關(guān)閉TCP套接字,釋放TCP連接;客戶端被動關(guān)閉TCP套接字,釋放TCP連接。

  5. 客戶端瀏覽器解析HTML內(nèi)容
    客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應頭,響應頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集??蛻舳藶g覽器讀取響應數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。

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

http://mail.163.com/index.html
  1. http://:這個是協(xié)議,也就是HTTP超文本傳輸協(xié)議,也就是網(wǎng)頁在網(wǎng)上傳輸?shù)膮f(xié)議。
  2. mail:這個是服務器名,代表著是一個郵箱服務器,所以是mail.
  3. 163.com:這個是域名,是用來定位網(wǎng)站的獨一無二的名字。
  4. mail.163.com:這個是網(wǎng)站名,由服務器名+域名組成。
  5. /:這個是根目錄,也就是說,通過網(wǎng)站名找到服務器,然后在服務器存放網(wǎng)頁的根目錄
  6. index.html:這個是根目錄下的默認網(wǎng)頁(當然,163的默認網(wǎng)頁是不是這個我不知道,只是大部分的默認網(wǎng)頁,都是index.html)
  7. http://mail.163.com/index.html:這個叫做URL,統(tǒng)一資源定位符,全球性地址,用于定位網(wǎng)上的資源。
image.png

常見的協(xié)議有http,https,ftp,mailto,telnet、file
常見協(xié)議參考

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

HTTP最大的作用就是客戶端發(fā)送請求,服務器給出響應,客戶端想服務器發(fā)送請求的方式有很多

方法 作用
GET 是最常用的方法,通常用于請求服務器發(fā)送某個資源我們平時在瀏覽器輸入網(wǎng)頁地址,就是給服務器發(fā)送了一個get請求,希望得到這個網(wǎng)頁
HEAD 和GET類似,但是在服務器的響應中沒有資源的內(nèi)容,只有資源的一些基本信息,主要用于 1. 在不獲取資源的情況下獲取資源信息(類型、大小等2. 通過狀態(tài)碼產(chǎn)看資源是否存在3. 通過查看首部,測試資源是否被修改了
PUT 和GET從服務器獲取資源相反,PUT用于想服務器寫入資源。PUT的語義就是讓服務器用請求的主體部分創(chuàng)建一個請求URL命名的文檔,如果存在就替換。當然處于安全原因,并不是所有的服務器都實現(xiàn),當然最近大熱的RESTful API使它有了用武之地
POST 用于想服務器發(fā)送數(shù)據(jù),通常用來支持HTML的表單(input、select、textarea),表單中的數(shù)據(jù)會被發(fā)送到服務器
TRACE 客戶端發(fā)送一個請求的時候,這個請求可能會穿過防火墻、代理、網(wǎng)關(guān)和一些其它應用程序,沒個中間節(jié)點都可能修改HTTP請求,TRACE方法允許客戶端在最終請求發(fā)往服務器的時候,看看它變成了什么樣子TRACE請求會在目的服務器端發(fā)送一個“閉環(huán)”診斷,行程最后一站服務器會彈回一條TRACE響應,并在響應主題中攜帶它收到的原始請求報文
DELETE 用于要求服務器刪除請求的URL,和PUT一樣,服務器可能會不支持
OPTIONS 用于請求 web服務器告知其支持的各種功能

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

Status Code

完整的 HTTP 1.1規(guī)范說明書來自于RFC 2616,HTTP 1.1的狀態(tài)碼被標記為新特性,用來表示請求的結(jié)果,狀態(tài)碼被分為五大類:

  • 100-199 用于指定客戶端應相應的某些動作。
  • 200-299 用于表示請求成功。
  • 300-399 用于已經(jīng)移動的文件并且常被包含在定位頭信息中指定新的地址信息。
  • 400-499 用于指出客戶端的錯誤。
  • 500-599 用于支持服務器錯誤。
狀態(tài)代碼 狀態(tài)信息 含義
200 OK 一切正常,對GET和POST請求的應答文檔跟在后面。
301 Moved Permanently 客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
304 Not Modified 客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告 訴客戶,原來緩沖的文檔還可以繼續(xù)使用。
403 Forbidden 資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由于服務器上文件或目錄的權(quán)限設(shè)置導致。
404 Not Found 無法找到指定位置的資源。這也是一個常用的應答。
500 Internal Server Error 服務器遇到了意料不到的情況,不能完成客戶的請求。
503 Service Unavailable 服務器由于維護或者負載過重未能應答。例如,Servlet可能在數(shù)據(jù)庫連接池已滿的情況下返回503。服務器返回503時可以提供一個 Retry-After頭。

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

  • 1、請求報文的組成
    起始行(請求方法,URI及協(xié)議版本)
    首部(請求首部, 通用首部 ,實體首部及其他)
    空行
    報文主體;

  • 2、響應報文的組成
    起始行(版本協(xié)議 ,狀態(tài)碼, 狀態(tài)碼對應的短語解釋)
    首部(響應首部,通用首部,實體首部及其他)
    空行
    報文主體。

HTTP/1.0 200 OK
content-type: text/plain
content-length: 19

Hi, I'm a message

起始行和首部就是由行分隔的ASCII文本,主題是一個可選的數(shù)據(jù)塊,可能是文本、二進制或者為空

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

image.png

`

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

image.png

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

主體就是服務端返回的頁面代碼等信息

image.png

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

image.png

注:除了Last-Modified和Etag,上面沒有把http1.0的產(chǎn)物---Expires和Pragma及http1.1的產(chǎn)物--Cache-Control列出來 。 關(guān)于Last-Modified、Etag、Expires及Cache-Control 可見下圖:

image.png

具體可詳見:HTTP緩存控制小結(jié)

文章提到,當同時存在Pragma 、Cache-Control、 Expires時, 優(yōu)先級從高到低分別是 Pragma -> Cache-Control -> Expires

其他緩存詳細介紹可見:騰訊web前端團隊博客 或者博客園的這篇文章

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

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

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