五、談下你對 http 長連線和短連線的理解?分別應用於哪些場景?
. http報文結構
六. 請求行
七. 狀態行
八. 常用的請求首部字段(http請求頭引數有哪些?)
九. 快取(快取驗證有兩種方式:etag 和 last-modified)
為特定應用程式提供資料傳輸服務。協議有 http、dns、dhcp 等協議。資料傳輸單位是報文。
計算機自動獲取ip位址、自動獲取dns伺服器位址,使用的就是dhcp協議(動態主機配置協議)。
http/1.0 工作流程:
每次請求文件都有兩倍的 rtt 開銷。
http1.0使用的是非持續連線,指的是客戶端接收到響應報文後就斷開tcp連線,下一次再重新建立連線,加重了伺服器的負擔。
http1.0使用的是非持續連線,http1.1使用的是持續連線,支援流水線方式,可以在同一條長連線上連續發出請求,而不用等待響應返回,減少了tcp連線的空閒時間,提高了效率:非持續連線指的是每次客戶端接收到響應報文後就斷開tcp連線,下一次再重新建立連線,會加重伺服器的負擔。由於這個特性,使用http1.0時,每次請求文件都有兩倍的 rtt 開銷,乙個 rtt 用於tcp連線,乙個 rtt 用於請求和接收文件。http1.1協議解決了這個問題,它使用的是持續連線,也就是在一段時間內保持tcp連線不斷開,使同乙個客戶和該伺服器能繼續使用這條連線傳送資料。持續連線有兩種工作方式:非流水線方式和流水線方式。非流水線方式的特點是客戶在收到前乙個響應後才能發出下乙個請求,每次訪問物件會耗費乙個 rtt 往返時間來請求和接收文件,相比非持續連線,節省了乙個建立tcp連線的 rtt 時間。非流水線方式的缺點是伺服器傳送完乙個物件後,tcp連線就處於空閒狀態了,浪費了伺服器資源。流水線方式的特點是客戶收到響應前就能接著傳送新的請求,伺服器連續收到請求,然後連續返回響應,因此客戶訪問所有物件只需要花費乙個 rtt 時間,於是減少了tcp連線的空閒時間,提高了效率。
http1.0 需要 keep-alive 引數來告知伺服器要建立乙個長連線,而 http1.1 預設使用長連線,而且支援同時開啟多個 tcp 連線
http1.1 支援只傳送請求頭而不傳送請求體。 原因是先用請求頭判斷能否成功,若能成功再發資料,可以節約頻寬,post 請求預設就是這樣做的。
http1.0 中,存在一些浪費頻寬的現象,例如客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了;http1.1 則在請求頭引入了 range頭域,它允許只請求資源的某個部分,可以節約頻寬。
http 1.1 新增狀態碼100,表示目前為止正常,客戶端可以繼續傳送請求或者忽略這個響應。
http/1.x 的缺陷:http/1.x 實現簡單是以犧牲效能為代價的
http/2.0 新特性(二進位制分幀層、服務端推送、首部壓縮、多路復用 )。(2.0與1.x的區別)
二進位制分幀層:http/2.0 將報文分成 headers 幀和 data 幀,它們都是二進位制格式的。而 http1.x 的解析是基於文字的。
服務端推送:http/2.0 在客戶端請求乙個資源時,會把相關的資源一起傳送給客戶端,客戶端就不需要再次發起請求了。例如客戶端請求 page.html 頁面,服務端就把 script.js 和 style.css 等與之相關的資源一起發給客戶端。而 http 1.0 需要請求一次 html,然後再請求一次 css,然後再請求一 次 js。
首部壓縮:http/1.1 的首部帶有大量資訊,而且每次都要重**送。http/2.0 進行了首部壓縮,而且要求客戶端和伺服器同時維護和更新乙個之前見過的首部字段表,從而避免了重複傳輸。
多路復用:http2.0 支援多路復用,同乙個連線可以併發處理多個請求,方法是把 http資料報拆為多個幀,併發有序的傳送, 然後根據序號在另一端進行重組, 而不需要乙個個 http請求順序到達。
請求行有三個內容:方法、http版本、url。
方法:常用的方法有:(http請求有哪些?)
狀態行有三個內容:狀態碼、http版本、解釋狀態碼的短語。
五大類狀態碼:
常見狀態碼:http 首部有 4 種型別的首部字段:通用首部字段、請求首部字段、響應首部欄位和實體首部字段。
通用首部欄位名
說明cache-control
控制快取的行為
請求首部欄位名
說明host
告知伺服器請求資源所在的主機名和埠號,http1.1規定必須包含在請求首部欄位內。
if-match
if-match 的字段值和請求資源的 etag 值一致時,才會執行請求(200 ok),否則返回狀態碼 412 先決條件失敗。
if-none-match
if-none-match 的字段值與請求資源的 etag 值不一致時,才會執行請求。與 if-match 作用相反。
if-modified-since
請求資源在 if-modified-since 字段值指定的日期時間之後發生了更新,才能處理請求,否則返回狀態碼 304 not modified 。請求首部字段 if-modified-since 用於確認本地資源的有效性,實體首部字段 last-modified 用於獲取資源最後的修改時間。
if-unmodified-since
請求資源在 if-unmodified-since 字段值指定的日期時間之後未發生更新,才能處理請求,否則返回狀態碼 412 先決條件失敗。與 if-modified-since 作用相反。
if-range
if-range 的字段值和請求資源的 etag 值或時間一致時,作為範圍請求來處理。否則返回全體資源。
cookie
伺服器接收到的cookie資訊
響應首部欄位名
說明etag
資源的匹配資訊
set-cookie
開始狀態管理所使用的cookie資訊
實體首部欄位名
說明last-modified
資源最後的修改時間
http/1.1 通過 cache-control 首部欄位來控制快取。
1. 優點
2. 實現方法
3. 快取驗證
url 不能唯一表示資源,比如 有中文和英文兩個資源,只有 etag 才能對資源進行唯一標識。
快取驗證有兩種方式:etag 和 last-modified
通過將快取資源的 etag 值放入 if-none-match 首部,伺服器收到該請求後,判斷快取資源的 etag 值和資源最新的 etag 值是否一致,如果一致則表示快取資源有效,返回 304 not modified。
last-modified 首部欄位也可以用於快取驗證,它表示伺服器對資源的最後修改時間。但它只能精確到一秒,是一種弱校驗器,所以通常作為 etag 的備用方案。如果響應首部欄位裡含有這個資訊,客戶端可以在後續的請求中帶上 if-modified-since 來驗證快取。請求資源在 if-modified-since 字段值指定的日期時間之後發生了更新,才能處理請求,否則返回狀態碼 304 not modified 。
計算機網路 應用層 HTTP
狀態碼request請求頭 response請求頭 參考 啞服務 連線上時不會回顯,要有其他行為時 url 協議 hosts 主機 埠 uri 路徑 1.0 時每乙個http都要建立一次tcp,1.0後可設定connection keep alive來讓tcp持續 客戶端傳送request,服務端回...
計算機網路 應用層 HTTP協議
是七層osi模型的第七層。應用層直接和應用程式介面並提供常見的網路應用服務。應用層也向表示層發出請求。應用層是開放系統的最高層,是直接為應用程序提供服務的。其作用是在實現多個系統應用程序相互通訊的同時,完成一系列業務處理所需的服務。超文字傳輸協議,是乙個屬於應用層的物件導向的協議,由於其簡捷 快速的...
計算機網路 應用層 HTTP協議
1.http概況 web的應用層協議是超文字傳輸協議 http 它是web的核心。http由兩部分程式實現 乙個客戶機程式和乙個伺服器程式,它們執行在不同的端系統中,通過交換http報文進行對話。http定義了這些報文的格式以及客戶機和伺服器是如何進行報文交換的。下圖是其基本思想 當使用者請求乙個w...