淺談http協(xié)議

1.http基礎(chǔ)概念

2.請求與響應(yīng)過程

3.請求頭響應(yīng)頭及請求方式簡述

4.客戶端緩存(cookie,session及其他緩存機制)

1.什么是http????

HTTP是一套計算機通過網(wǎng)絡(luò)進(jìn)行通信的規(guī)則。使HTTP客戶(如Web瀏覽器)能夠從HTTP服務(wù)器(Web服務(wù)器)請求信息和服務(wù),HTTP是一種無狀態(tài)的協(xié)議。

1.1無狀態(tài)的協(xié)議

無狀態(tài)是指Web瀏覽器和Web服務(wù)器之間不需要建立持久的連接,

這意味著當(dāng)一個客戶端向服務(wù)器端發(fā)出請求,然后Web服務(wù)器返回響應(yīng)(response),連接就被關(guān)閉了

2. 一次完整的http請求

域名解析:

(1) 瀏覽器首次搜索自身的DNS緩存,檢查自身的緩存(緩存時間大概為 幾分鐘)中有沒有相應(yīng)的域名IP地址。如果有,則檢查是否過期,如果沒有過期,那么將結(jié)果返回并結(jié)束域名解析的過程;否則,往下執(zhí)行;

(2) 在瀏覽器自身沒找到IP地址的話,瀏覽器就會在操作系統(tǒng)搜索DNS緩存。如果存在,同樣需要檢查是否過期;

(3) 如果操作系統(tǒng)中也沒有找到,那么就讀取本地的HOST文件(在C盤下:Windows\System32\drivers\etc),在本地文件里面查找;

(4) 如果在本地HOST文件下也沒能找到,那么瀏覽器發(fā)起一個DNS的系統(tǒng)調(diào)用。過程如下:

  1. 寬帶運營商服務(wù)器查看本地緩存,如果找到就結(jié)束該過程,否則繼續(xù)執(zhí)行;

  2. 寬帶運營商服務(wù)器代替瀏覽器發(fā)起一個迭代DNS的請求:首先找到根域的DNS IP地址拿到頂級域COM域的IP地址;接著在COM域服務(wù)器的地址中尋找主域名(如:imooc.com)的DNS服務(wù)器的地址;最后在主域名DNS服務(wù)器中找到請求的域名的IP地址,主域名DNS服務(wù)器就將該地址發(fā)送給運營商服務(wù)器。這個時候運營商服務(wù)器將結(jié)果返回給操作系統(tǒng)內(nèi)核,然后內(nèi)核從操作系統(tǒng)DNS服務(wù)器上拿去IP地址并返回給瀏覽器,最后就是瀏覽器拿到了請求域名的IP地址。

( 1 ) 建立TCP連接

三次握手 建立連接

( 2 ) 瀏覽器向服務(wù)器發(fā)送請求命令

( 3 ) 服務(wù)器響應(yīng)

( 4 ) Web服務(wù)器關(guān)閉TCP連接

請求方式:

GET

GET是http的默認(rèn)請求方式,一般用來獲取數(shù)據(jù),傳輸?shù)臄?shù)據(jù)經(jīng)過url編碼后放在路徑?之后,多個鍵值對通過&連接,另外get的傳輸長度一般不推薦超過255個字節(jié)。

GET方法一般被視為安全方法, 因為它僅用來獲取數(shù)據(jù)而不會對服務(wù)器有其他改動。像HEAD、GET、OPTIONS 和 TRACE這幾種http方法是被認(rèn)為是“安全的”,它們只會進(jìn)行獲取數(shù)據(jù)而不會修改服務(wù)器的狀態(tài),可用于記錄日志、創(chuàng)建緩存或者創(chuàng)建其他統(tǒng)計信息。相反,像POST、PUT、DELETE 和 PATCH 等方法是有可能產(chǎn)生副作用。網(wǎng)絡(luò)爬蟲等一般不會使用這些方式

POST

POST一般用來上傳文件或者提交一個完整的web表單。瀏覽器中提交表單時,這里與get類似,每個鍵值對都是通過&分割, 其他非字母數(shù)字會進(jìn)行url轉(zhuǎn)碼。

其他請求方式

  • HEAD獲取某個URI響應(yīng)頭信息,基本與GET相同但是不返回響應(yīng)主體。
  • PUT通過提供的URI獲取到特定的內(nèi)容主體,如果存在則修改內(nèi)容,如果不存在則創(chuàng)建。
  • DELETE通過URI刪除指定內(nèi)容
  • TRACE返回接受到的請求,用來查看數(shù)據(jù)經(jīng)過中間服務(wù)器時發(fā)生了哪些變動
  • OPTIONS返回給定URL支持的所有HTTP方法,這樣可以用來檢查web服務(wù)器的功能
  • CONNECT要求使用SSL和TLS進(jìn)行TCP通信
  • PATCH請求修改局部數(shù)據(jù)

這些請求方法本質(zhì)上沒有區(qū)別,最終都是TCP請求,唯一的區(qū)別就是每個請求方法,使用的時候,規(guī)范規(guī)定的使用格式不同,原則上必須按照規(guī)范規(guī)定的格式使用,其實也可以違反規(guī)范使用,比如你可以使用GET方法請求數(shù)據(jù),也可以使用GET方法提交數(shù)據(jù),當(dāng)然你可以用POST方法提交數(shù)據(jù),也可以用POST方法獲取數(shù)據(jù)。

下面是Chrome發(fā)起的http請求報文頭部信息:

clipboard3.png
  • Accept 就是告訴服務(wù)器端,我接受那些MIME類型
  • Accept-Encoding 接受哪些壓縮方式的文件
  • Accept-Lanague 告訴服務(wù)器能夠發(fā)送哪些語言
  • Connection 告訴服務(wù)器支持keep-alive特性
  • Cookie 每次請求時都會攜帶上Cookie以方便服務(wù)器端識別是否是同一個客戶端
  • Host 用來標(biāo)識請求服務(wù)器上的那個虛擬主機,比如Nginx里面可以定義很多個虛擬主機.那這里就是用來標(biāo)識要訪問那個虛擬主機。
  • User-Agent 用戶代理,一般情況是瀏覽器,也有其他類型,如:wget curl 搜索引擎的蜘蛛等
  • 安全請求首部:
  • Authorization: 客戶端提供給服務(wù)器的認(rèn)證信息;
  • accessToken: 一般作為請求操作時的訪問令牌,比如你讓用戶用QQ登陸后要去拿用戶的QQ頭像,這時候向騰訊API發(fā)送請求時就需要帶上access_token。

響應(yīng)頭:


clipboard4.png
  • Access-Control-Allow-Credentials: 允許跨域
  • Access-Control-Allow-Headers: 允許訪問的請求頭
  • Access-Control-Allow-Methods: 請求方式
  • Access-Control-Allow-Origin: 域名
  • Access-Control-Expose-Headers:
  • Transfer-Encoding:chunked 分塊傳輸編碼 是http中的一種數(shù)據(jù)傳輸機制,允許HTTP由網(wǎng)頁服務(wù)器發(fā)送給客戶端應(yīng)用(通常是網(wǎng)頁瀏覽器)的數(shù)據(jù)可以分成多個部分

拓展:(WebSocket) 有狀態(tài)

需要通過瀏覽器發(fā)出websocket連線請求,然后服務(wù)器發(fā)出回應(yīng),瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。

特點:持久的連接

互相溝通的Header是很小的-大概只有 2 Bytes

服務(wù)器不再被動的接收到瀏覽器的請求之后才返回數(shù)據(jù),而是在有新數(shù)據(jù)時就主動推送給瀏覽器。

webSocket api

  1. 創(chuàng)建webSocket對象

var Socket = new WebSocket(url, [protocol] );//第一個參數(shù) url, 指定連接的 URL。第二個參數(shù) protocol 是可選的,指定了可接受的子協(xié)議。

  1. 方法:


    QQ截圖20180114160210.png

詳細(xì)了解 參考資料(https://www.zhihu.com/question/20215561


瀏覽器存儲機制

cookie、localstorage、sessionStorage

clipboard.png

cookie的內(nèi)容主要包括:名字、值、過期時間、路徑和域

Secure – 安全

指定cookie的值通過網(wǎng)絡(luò)如何在用戶和WEB服務(wù)器之間傳遞。

這個屬性的值或者是“secure”,或者為空。缺省情況下,該屬性為空,也就是使用不安全的HTTP連接傳遞數(shù)據(jù)。如果一個 cookie 標(biāo)記為secure,那么,它與WEB服務(wù)器之間就通過HTTPS或者其它安全協(xié)議傳遞數(shù)據(jù)。不過,設(shè)置了secure屬性不代表其他人不能看到你機器本地保存的cookie。換句話說,把cookie設(shè)置為secure,只保證cookie與WEB服務(wù)器之間的數(shù)據(jù)傳輸過程加密,而保存在本地的 cookie文件并不加密。如果想讓本地cookie也加密,得自己加密數(shù)據(jù)。

Web Storage的概念和cookie相似,區(qū)別是它是為了更大容量存儲設(shè)計的。Cookie的大小是受限的,并且每次你請求一個新的頁面的時候Cookie都會被發(fā)送過去,這樣無形中浪費了帶寬,另外cookie還需要指定作用域,不可以跨域調(diào)用。

除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發(fā)者自己封裝setCookie,getCookie。

最主要的區(qū)別:

  • localStorage生命周期是永久,這意味著除非用戶顯示在瀏覽器提供的UI上清除localStorage信息,否則這些信息將永遠(yuǎn)存在。
  • sessionStorage生命周期為當(dāng)前窗口或標(biāo)簽頁,一旦窗口或標(biāo)簽頁被永久關(guān)閉了,那么所有通過sessionStorage存儲的數(shù)據(jù)也就被清空了。

Cache

1.Application Cache

html5提供的一種應(yīng)用緩存機制,使得基于web的應(yīng)用程序可以離線運行。優(yōu)點有如下幾點:

離線瀏覽: 用戶可以在離線狀態(tài)下瀏覽網(wǎng)站內(nèi)容。

更快的速度: 因為數(shù)據(jù)被存儲在本地,所以速度會更快。

減輕服務(wù)器的負(fù)載: 瀏覽器只會下載在服務(wù)器上發(fā)生改變的資源。

使用:

1.開啟應(yīng)用緩存:在html標(biāo)簽制定manifest,manifest特性與 緩存清單(cache manifest) 文件關(guān)聯(lián),這個文件包含了瀏覽器需要為你的應(yīng)用緩存的資源(文件)列表

clipboard1.png

2.編寫緩存清單文件

clipboard2.png

CACHE:

這是緩存文件中記錄所屬的默認(rèn)段落。在 CACHE: 段落標(biāo)題后(或直接跟在 CACHE MANIFEST 行后)列出的文件會在它們第一次下載完畢后緩存起來。

NETWORK:

在 NETWORK: 需要與服務(wù)器連接的白名單資源。所有類似資源的請求都會繞過緩存,即使用戶處于離線狀態(tài)??梢允褂猛ㄅ浞?”代表除以上指定之外全部需要從服務(wù)器拉取。

FALLBACK:

FALLBACK: 段指定了一個后備頁面,當(dāng)資源無法訪問時,瀏覽器會使用該頁面。該段落的每條記錄都列出兩個 URI—第一個表示資源,第二個表示后備頁面。兩個 URI 都必須使用相對路徑并且與清單文件同源。可以使用通配符,類似404.html。

CACHE, NETWORK, 和 FALLBACK 段落可以以任意順序出現(xiàn)在緩存清單文件中,并且每個段落可以在同一清單文件中出現(xià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)容

  • 本文為原創(chuàng)作品。歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處:林東洲的博客 | Lindz Blog。 作為一個 Weber,掌握必要...
    Lindz閱讀 896評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,345評論 3 82
  • http協(xié)議有http0.9,http1.0,http1.1和http2三個版本,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,998評論 0 3
  • 喜歡的東西:陽光,1988,你鏡頭下的貓。
    江添閱讀 120評論 0 0

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