HTTP協(xié)議

人生就像一列開往墳?zāi)沟牧熊?,路途上?huì)有很多站,很難有人至始至終陪你走完全程,當(dāng)陪你的人要下車時(shí),即便不舍,也要心存感激,然后揮手告別。---sunnyhuang

HTTP

1. OSI 七層模型指什么

七層模型圖

開放式系統(tǒng)互聯(lián)通信參考模型(OSI)

主機(jī)層

Data(數(shù)據(jù)層)7.應(yīng)用層 6. 表示層 5.會(huì)話層

Segments(數(shù)據(jù)段) 4.傳輸層

媒介層

網(wǎng)絡(luò)分組/數(shù)據(jù)報(bào)文 3. 網(wǎng)絡(luò)層

Bit/Frame(數(shù)據(jù)幀) 2. 數(shù)據(jù)鏈路層

Bit(比特) 1. 物理層

應(yīng)用層: 規(guī)定了數(shù)據(jù)的傳輸協(xié)議,提供為應(yīng)用軟件而設(shè)的界面,以設(shè)置與另一應(yīng)用軟件之間的通信。例如: HTTP,HTTPS,F(xiàn)TP,TELNET,SSH,SMTP,POP3等。

表示層:解決不同系統(tǒng)之間的通信。例如:linux下的qq和windows下的qq可以通信

會(huì)話層:建立一個(gè)連接(自動(dòng)的手機(jī)信息,自動(dòng)的網(wǎng)絡(luò)尋址)

傳輸層:每一個(gè)應(yīng)用程序都會(huì)在網(wǎng)卡注冊(cè)一個(gè)端口號(hào),該層就是端口和端口之間的通信,常用的是TCP/IP協(xié)議

網(wǎng)絡(luò)層:此處需要確定計(jì)算機(jī)的位置,怎么確定?IPv4,IPv6!

數(shù)據(jù)鏈路層:可以簡單的理解為:規(guī)定了0和1的分包形式,確定了網(wǎng)絡(luò)數(shù)據(jù)包的形式

物理層:物理層負(fù)責(zé)最后將信息編碼成電流脈沖或其它信號(hào)用于網(wǎng)上傳輸

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

HTTP(超文本傳輸協(xié)議)是應(yīng)用層協(xié)議。HTTP協(xié)議采用的是請(qǐng)求/響應(yīng)模型,當(dāng)客戶端給服務(wù)器建立連接后,向服務(wù)器發(fā)送一個(gè)請(qǐng)求,服務(wù)器接收到相應(yīng)的請(qǐng)求后,給客戶端一個(gè)響應(yīng)信息。

  1. 客戶端連接到web服務(wù)器:HTTP客戶端與web服務(wù)器建立一個(gè)TCP連接
  2. 客戶端向服務(wù)器發(fā)起HTTP請(qǐng)求:通過已經(jīng)創(chuàng)建好了的TCP連接,客戶端給服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文
  3. 服務(wù)器接收HTTP請(qǐng)求并返回HTTP響應(yīng):服務(wù)器解析請(qǐng)求,定位請(qǐng)求資源,服務(wù)器將資源副本寫到TCP連接,由客戶端讀取
  4. 釋放TCP連接:若connection模式為close,則服務(wù)器主動(dòng)關(guān)閉TCP連接,釋放TCP連接,若connection模式為keep alive,則該連接會(huì)保持一段時(shí)間,在該時(shí)間內(nèi)可以繼續(xù)接受請(qǐng)求

3.URL的格式是什么?常見的協(xié)議

URL(統(tǒng)一資源定位符):協(xié)議+域名+端口+路徑組成

常見的協(xié)議

  1. 網(wǎng)絡(luò)層協(xié)議: IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議。
  2. 傳輸層協(xié)議:TCP協(xié)議、UDP協(xié)議。
  3. 應(yīng)用層協(xié)議: FTP、Talnet、HTTP、SMTP

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

  1. GET:最常用的方法,通常用于請(qǐng)求服務(wù)器發(fā)送某個(gè)資源,通常返回在響應(yīng)主體
  2. POST: 向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理,如:表單的數(shù)據(jù)提交,文件的上傳等,請(qǐng)求數(shù)據(jù)會(huì)被包含在請(qǐng)求體中。
  3. HEAD: 和GET方法類似,但是它不會(huì)資源的內(nèi)容,而是返回資源的一些基本信息。主要運(yùn)用于
    • 在不獲取資源的情況下獲取資源信息(類型、大小等)
    • 通過狀態(tài)碼產(chǎn)看資源是否存在
    • 通過查看首部,測(cè)試資源是否被修改了
    • HEAD方法常被用于客戶端查看服務(wù)器的性能。
  4. PUT: 和GET從服務(wù)器獲取資源相反,PUT用于想服務(wù)器寫入資源。PUT的語義就是讓服務(wù)器用請(qǐng)求的主體部分創(chuàng)建一個(gè)請(qǐng)求URL命名的文檔,如果存在就替換。
  5. TRACE: 客戶端發(fā)送一個(gè)請(qǐng)求的時(shí)候,這個(gè)請(qǐng)求可能會(huì)穿過防火墻、代理、網(wǎng)關(guān)和一些其它應(yīng)用程序,沒個(gè)中間節(jié)點(diǎn)都可能修改HTTP請(qǐng)求,TRACE方法允許客戶端在最終請(qǐng)求發(fā)往服務(wù)器的時(shí)候,看看它變成了什么樣子。
  6. DELETTE:用于要求服務(wù)器刪除請(qǐng)求的URL。
  7. OPTIONS: OPTIONS方法用于請(qǐng)求 web服務(wù)器告知其支持的各種功能

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

200: 表示請(qǐng)求得到響應(yīng)的相應(yīng) OK

**301: **表示客戶請(qǐng)求的文檔在其他地方,新的URL在Location中指出,瀏覽器會(huì)自動(dòng)地訪問新的URL地址 Moved Permanently(永久行的移動(dòng))


301狀態(tài)碼

**302: ** ---類似于301,但是表示臨時(shí)的替代,而不是永久性替代,瀏覽器也會(huì)自動(dòng)跳到新的URL地址, “Moved Temporatily”(臨時(shí)的移動(dòng))

304: ---(未修改)自從上次請(qǐng)求后,請(qǐng)求的內(nèi)容沒有被修改過,不會(huì)返回內(nèi)容,直接用瀏覽器的緩存內(nèi)容。通常(If-Modified-Since在請(qǐng)求頭中,瀏覽器端緩存頁面的最后修改時(shí)間一起發(fā)到服務(wù)器去,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間Last-Modified進(jìn)行比較,如果時(shí)間一致,就使用緩存)If-Modified-Since解析

403: ---(禁止)資源不可用,服務(wù)器理解客戶的請(qǐng)求,但拒絕處理它。通常由于服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致。Forbidden

404: ---(未找到) 找不到資源 Not Found

500: ---(服務(wù)器內(nèi)部錯(cuò)誤)服務(wù)器遇到了意料不到的情況,不能完成客戶的請(qǐng)求

503: --- (服務(wù)不可用)服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))

6.報(bào)文有哪幾部分組成?

一個(gè)HTTO報(bào)文有三部分組成

  1. 對(duì)報(bào)文進(jìn)行描述的起始行 ----start line
  2. 包含屬性的首部塊 ----header
  3. 可選的包含數(shù)據(jù)的主體部分 ----body

HTTP報(bào)文分2大類

請(qǐng)求報(bào)文 :向web服務(wù)器請(qǐng)求一個(gè)動(dòng)作

<method><request-URL><version>
<headers>

<entity-body> /*請(qǐng)求一般沒有數(shù)據(jù)的內(nèi)容*/

響應(yīng)報(bào)文: 將請(qǐng)求結(jié)果返回給客戶端

<version><status><reason-phrase>
<headers>

<entity-body>

7.請(qǐng)求頭的格式和作用是什么?給個(gè)范例截圖說明

格式:鍵值對(duì)

作用:告訴客戶端一些請(qǐng)求的基本要求和樣式


request headers.png

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

格式: 鍵值對(duì)

首部的分類:1. 通用首部字段(General)2. 請(qǐng)求首部字段(Request),3. 響應(yīng)首部字段(Response),4. 實(shí)體首部字段(Entity)

首部.png

9主體的作用是什么?給個(gè)范例

主體: 主體是HTTP的第三個(gè)部分,該部分是可選擇的,一般有主體的請(qǐng)求方法是post。主體是HTTP報(bào)文的負(fù)荷,就是HTTP所要傳輸?shù)膬?nèi)容。

response內(nèi)容.png

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

第一次請(qǐng)求

沒有緩存的時(shí)候

有緩存后第二次請(qǐng)求

第二次請(qǐng)求
  • Cache-control:每個(gè)資源都可以通過設(shè)置cache-control來簡歷緩存策略。例如,若設(shè)定Cache-Control: max-age=604800,(單位為秒),則表示這個(gè)資源的有效時(shí)間為 7 天。 ----服務(wù)器返回Cache- Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置 Cache-Control并不會(huì)修改另一個(gè)消息處理過程中的緩存處理過程
  • Expires:響應(yīng)頭從另一個(gè)角度——指明緩存的具體過期日期,來控制資源何時(shí)過期。在過期時(shí)間以內(nèi),若再次發(fā)起請(qǐng)求,通常瀏覽器都不會(huì)與服務(wù)器進(jìn)行任何通信,而是直接使用本地副本。當(dāng) Expires 和 Cache-Control 同時(shí)出現(xiàn)時(shí),通常后者會(huì)覆蓋前者的設(shè)定。 ----Response Headers中,指定過期時(shí)間
  • Last-Modified和ETag:服務(wù)器可在 HTTP 返回頭中包含Last-Modified字段或者ETag字段。Last-Modified 表示被請(qǐng)求資源在服務(wù)器端的上次修改時(shí)間,而 ETag 則是一個(gè)唯一文件標(biāo)識(shí)符,每次文件修改后都會(huì)生成一個(gè)新的 ETag。服務(wù)器通過向?yàn)g覽器發(fā)送這兩個(gè)字段,來告知瀏覽器其獲得的資源的版本。
    無論通過 Cache-Control 還是 Expires 設(shè)置緩存,在過期時(shí)間以內(nèi),當(dāng)用戶點(diǎn)擊瀏覽器刷新按鈕時(shí),為了確保用戶所加載的資源是最新的,大部分瀏覽器不會(huì)再直接使用緩存中的數(shù)據(jù),而是發(fā)出一個(gè)條件請(qǐng)求(Conditional GET Request)。對(duì)于這類請(qǐng)求,瀏覽器會(huì)在請(qǐng)求頭中包含If-Modified-Since或If-None-Match字段。前者即瀏覽器當(dāng)初得到的 Last-Modified;后者即瀏覽器當(dāng)初得到的 ETag。當(dāng)服務(wù)器發(fā)現(xiàn)資源的更新時(shí)間晚于 If-Modified-Since 所提供的時(shí)間,或者資源在服務(wù)器端當(dāng)前的 ETag 和 If-None-Match 提供的不符時(shí),會(huì)響應(yīng)整個(gè)資源,否則只會(huì)響應(yīng)一個(gè) 304 Not Modified 狀態(tài)碼(因此瀏覽器將不需要重新下載整個(gè)資源)。這種機(jī)制可以最大程度上減少數(shù)據(jù)下載量。此外,如果緩存的資源已過期,瀏覽器通常有兩種選擇:重新下載這個(gè)資源,或發(fā)出一個(gè)條件請(qǐng)求。很多瀏覽器都會(huì)采取后者,以節(jié)約資源。
  • ---Last-modified實(shí)體頭指定服務(wù)器上保存內(nèi)容的最后修訂時(shí)間。
  • Pragma:指定“no-cache”值表示服務(wù)器必須返回一個(gè)刷新后的文檔,即使它是代理服務(wù)器而且已經(jīng)有了頁面的本地拷貝。

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

參數(shù)的意思

通用首部General

  • Request URL: 資源的路徑
  • Request Method: 資源的請(qǐng)求的方法
  • Status Code: 返回的狀態(tài)碼
  • Remote Address: 遠(yuǎn)程服務(wù)器的ip地址和端口號(hào)

反應(yīng)頭部(Response Headers)

  • Connection:表示是否需要持久連接(close/keep-alive ),如果Servlet看到這里的值為“Keep- Alive”,或者看到請(qǐng)求使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接),它就可以利用持久連接的優(yōu)點(diǎn),當(dāng)頁面包含多個(gè)元素時(shí)(例如Applet,圖片),顯著地減少下載所需要的時(shí)間。
  • Content-Length: 表示實(shí)際傳輸返回的長度
  • Date: 返回文檔的當(dāng)?shù)貢r(shí)間
  • server: 表示服務(wù)器的類型
  • X-Powered-By: 表示語言解析器

請(qǐng)求頭(Request Headers)

  • accept: 瀏覽器可接受的MIME類型。
  • Accept-Encoding 瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時(shí)間。
  • Accept-Language:瀏覽器所希望的語言種類,當(dāng)服務(wù)器能夠提供一種以上的語言版本時(shí)要用到。
  • Connection:表示是否需要持久連接
  • Content-Length:表示請(qǐng)求消息正文的長度。
  • Content- Type 表示后面的文檔屬于什么MIME類型。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置 Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法setContentTyep。
  • Cookie: 個(gè)人的信息保存量,來區(qū)分不同的人不同的界面
  • Host: 指定請(qǐng)求資源的Intenet主機(jī)和端口號(hào),必須表示請(qǐng)求url的原始服務(wù)器或網(wǎng)關(guān)的位置。
  • Origin: 用來說明最初請(qǐng)求是從哪里發(fā)起的,只用于post請(qǐng)求
  • Referer: 表示上一個(gè)頁面的地址,包含一個(gè)URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請(qǐng)求的頁面。
  • User-agent: 瀏覽器類型,如果Servlet返回的內(nèi)容與瀏覽器類型有關(guān)則該值非常有用。
  • X-Requested-With: 用于區(qū)分是傳統(tǒng)的同步請(qǐng)求,還是AJAX異步請(qǐng)求

參考鏈接

http綜合

X-Requested-With區(qū)別

If-Modified-Since

瀏覽器緩存知識(shí)

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

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

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