http2 0相比http1 0的優勢

2021-10-01 07:41:14 字數 4423 閱讀 9645

http2.0所有資料以二進位制進行傳輸,

同乙個連線裡面傳送多個請求不再按順序來

頭資訊壓縮以及等提高效率的功能,頭壓縮減少頻寬,請求html同時提前推送js,css資源。

http1.1之後,傳送乙個http請求,會建立乙個tcp連線,該鏈結在請求返回後不會關閉,下次傳送其他http請求,會繼續使用該鏈結。

抓包工具:wireshark (傳輸層, 網路層都可以抓), charles

tcp三次握手

seq = 0

seq = 0 ack =1

seq = 1 ack = 1

第一次握手,傳送syn報文,傳達資訊:「你好,我想建立連線」;

第三次握手,回傳ack報文,傳到資訊:「好的,我知道了,那我們連線」。然後就建立連線了。

uri, url, urn  uri包括 url, urn

uri uniform resource idetifier /統一資源標誌符,唯一標識網際網路上的資源

url uniform resource locator /統一資源定位符

ftp協議也可以獲取網路資源

urn 永久資源定位符 使用較少

在命令列中發起http請求  curl -v www.baidu.com

關於跨域:瀏覽器傳送請求後,即使跨域。服務端也會返回資訊,只是此時瀏覽器沒有檢測到access-control-allow-origin已設定允許跨域的網域名稱,直接忽略返回內容,並報錯

link, image, script標籤無跨域限制

跨域限制:

x-test-cors設定後, access-control-allow-origin不允許跨域

get , header, post 預設允許跨域, 其他請求方法瀏覽器會進行預請求驗證

什麼是預請求:

access-control-allow-headers: 'x-test-cors'  設定允許跨域的請求頭

瀏覽器請求頭設定x-test-cors:''的值後,傳送正式請求之前,瀏覽器會先傳送乙個options請求,用來驗證當前設定的請求頭是否被允許跨域使用

其他的預請求驗證還有:

access-control-allow-method:' post, put, delete'

access-control-max-age: '1000'  預請求儲存的最長有效時間 單位s  1000s之內不用再進行預請求驗證

cache-control

可快取性:

public   是指在http請求返回的內容所經過的任何路徑中都可以將其快取

private  不允許**伺服器快取(中間經過的路徑)

no-cache  可以使用快取,但是每次都要驗證

到期max-age 單位秒

s-maxage 會覆蓋max-age,只在**伺服器生效

max-stale (瀏覽器中很少用)

重新驗證(瀏覽器中用的比較少)

must-revalidater

proxy-revalidater 使用在快取伺服器中

其他:no-store 瀏覽器和**伺服器都不可以使用快取

no-transform 使用在快取伺服器中,禁止轉換返回內容

例項:cache-control: 'max-age = 200, public'  多個用逗號隔開

max-age後,如果時間沒有到期,即使伺服器資源進行了修改,瀏覽器端還是會使用本地的快取。

解決上面問題的方法:資源url路徑加內容計算出來的hash值

cache設定 no-cache時, 每次都會進行快取驗證

驗證頭:

last-modified 上次修改時間 , 配合if-modified-since和if-unmodified-since(使用較少)使用

上面的是對比最後修改時間,判斷資源有沒有被修改

etag 資料簽名  根據內容生成的hash值  對比瀏覽器端和服務端的etag是否一致

例項:設定no-cache後才可以使用etag和last-modified

服務端設定

cache-control: 'max-age = 200000,no-cache',

etag:'777',

last-modified:'123'

瀏覽器第一次請求時接收到上面的請求頭資訊,瀏覽器在下次傳送請求時,會帶上下面兩個值

if-modified-since: 123,

if-modified-match: 777

此時服務端的邏輯設定為:

const etag = request.headers['if-modified-match'];

if(etag === '777'){

response.writeheader(304,{

cache-control: 'max-age = 200000,no-cache',

etag:'777',

last-modified:'123'

response.end('')

對於if-modified-since對比的是最後的修改時間,服務端在修改資源後,可以在資料庫儲存該資源最後的修改時間

cookie

通過set-cookie設定

下次請求會自動帶上

鍵值對形式,可以設定很多個

cookie屬性

max-age,expires設定cookie過期時間

max-age代表cookie有效時間有多長

expires是指cookie到期的時間點

secure只在https的時候傳送

httponly無法通過document.cookie訪問

例項:response.writeheader(304,{

'cache-control': 'max-age = 200000,no-cache',

』set-cookie': 'id=123'

子網域名稱獲取主網域名稱設定的cookie

服務端:

const host = request.headers.host;

if(host === 'a.test.com'){

'cache-control': 'max-age = 200000,no-cache',

』set-cookie': 'id=123;max-age=200'

chrome工具 host admin 對映網域名稱和ip

設定所有子網域名稱都可以訪問主網域名稱的cookie

只需要設定cookie中的domain = test.com

』set-cookie': 'id=123;max-age=200;domain=test.com'

session

cookie不等於session

http長連線

chrome最大併發 6個  最多一次6個不同的tcp連線

connect:'keep-alive'  |  'close'

http2有通道復用,  所有的請求復用乙個tcp連線 (同網域名稱)

資料協商

分類:請求  返回

請求:accept 指定想要的資料型別

accept-encoding 

accept-language

user-agent  瀏覽器相關資訊  系統版本   瀏覽器核心  渲染引擎的版本 chrome版本號  等等

返回content

content-type : 資料的格式

content-encoding 資料壓縮的方式

content-language 是否按照請求設定的語言返回

node中使用zlib包壓縮資料

res.end(zlib.gzipsync(html))

redirect

指定302

response.writeheader(302,{

'loaction' : '/new'

指定301

response.writeheader(301,{   //將路徑永久重定向,由瀏覽器重定向請求

'loaction' : '/new'

設定請求頭:vary 當請求頭是同乙個值時,才會使用快取(針對**快取)

cache-control:"s-maxage=200"

vary: "x-test-cache"

x-test-cache的值相同時,才可以使用快取

加密私鑰

公鑰 放在網際網路上的加密過的字串,所有人都可以拿到,用來對傳輸的資訊加密

公鑰和私鑰在握手的時候傳輸

https握手過程

https預設使用443埠

nginx配置https http重定向到http

HTTP2 0相較HTTP1 0有哪些公升級

一 http發展史 1 1.網際網路 網際網路的發源,始於1969年美國的阿帕網 arpanet 中文直譯 高階研究專案 網路 其開始是為了建立一種用於軍隊通訊的網路。另一種推動網際網路發展的是nsf網,它最初是由美國國家科學 會資助建設的,目的是連線全美的5個超級計算機中心,供100多所美國大學共...

http2 0 相對於 http1 1的優勢

1.http2.0完全是多路復用的,只需乙個連線就可實現並行 可以將不同的請求夾雜在一起,只需乙個連線就能載入乙個頁面。2.可以讓伺服器將響應主動推動到客戶端快取中 3.壓縮報頭,降低了開銷 http1.1不支援頭部壓縮,所以產生了spdy和http2.0協議,spdy使用的是通用的deflate演...

HTTP 2 0 的那些事

spdy協議是google提出的基於傳輸控制協議 tcp 的應用層協議,通過壓縮 多路復用和優先順序來縮短載入時間。該協議是一種更加快速的內容傳輸協議,於2009 年年中發布。也可以把spdy看作是http 2的前身。spdy並不是首字母縮略字,而僅僅是 speedy 的縮寫。spdy現為googl...