關於http協議的整理(一)

2021-09-13 03:57:03 字數 3988 閱讀 5251

目錄

前言:相關知識總結:

1.在瀏覽器輸入url後http請求的完整過程

2.五層模型

4.http三次握手

三次握手的時序圖。

為什麼要三次握手?

抓包工具:wireshark

5.uri,urn,url

6.http報文格式

7.通過node搭建乙個簡單的服務

http在我們出現在我們身邊的頻率是非常高的,比如舉幾個簡單的例子,從輸入url到開啟網頁,從ajax獲取資料,img標籤載入等等。http中也同樣涉及到乙個非常重要的問題,快取,也就是http頭中的cache-control.以及快取驗證,許多重要的頭資訊,以及去了解到tcp,三次握手等等,這篇文章作為我的總結,會將上面所述都一一帶到。

這一部分僅僅為http為重點來進行描述,對於相關請求響應後的例如css,js渲染頁面等就不做闡述。

這是我在網上看到的一張圖,這裡將上述問題都進行了大致的描述。

然後我們再來看上面那張圖,

(1)一開始發起請求url,一開始就redirect的原因是,可能瀏覽器已經記錄你的位址跳轉乙個新的位址,瀏覽器需要判斷需要不需要redirect。(就比如說你之前這個**都是通過a.test.com來訪問的現在換網域名稱了變成b.test.com了要進行redirect)

(2)再去看快取裡面有沒有,如果有就返回

(3)如果沒有就要去實際的網域名稱裡面找,輸入的是網域名稱,找到需要對應成實際的ip才行,也就是dns解析。

(4)有了ip以後,就要建立tcp連線,需要三次握手以後才能建立鏈結,如果是https,就是建立https的鏈結和http三次握手不一樣,要有一乙個安全的過程。

(5)連線好了以後才發請求,傳送請求的資料好了以後,

(6)伺服器接受並返回請求的相應的資料。

經典的五層模型,其中下面三層,物理層主要是定義物理裝置以及如何傳輸資料,資料鏈路層是在通訊實體間建立資料鏈路連線,網路層為資料在結點之間傳輸建立邏輯鏈路。

傳輸層,為使用者提供了可靠的端到端的服務,向高層遮蔽了下層資料通訊的細節。(tcp,udp)

應用層,為應用軟體提供了很多服務,構建在tcp協議之上,遮蔽了網路傳輸的相關細節。(http,ftp..)

是最早的,它只有乙個命令就是get,沒有header等描述資訊,在伺服器傳送完畢後,就會關閉tcp連線。

它增加了很多命令,增加了status,code,和header,可以多字符集支援,多部分傳送,許可權,快取等。

它有了持久連線,pipeline,增加了host和其他的一些命令。

持久連線:http持久連線,就是在乙個http請求要傳送的話,客戶端和服務端之間要建立三次握手,然後在客戶端和服務端建立連線完畢以後,在服務端返回完內容以後就關閉掉了這個tcp連線,代價比較大。持久連線就是傳送完以後,可以不關閉這個tcp連線了,就會減少這個代價。

pipeline:在同乙個連線中傳送多個請求。服務端按順序內容返回。序列。

所有的資料以二進位制傳輸,同乙個連線的多個請求不需要再按照順序來進行,可以並行,頭資訊壓縮以及推送等提高效率的功能。

在http1頭資訊都要完整的傳送,通過字串儲存,占用的頻寬大。

推送:之前只能是客戶端主動傳送請求,服務端被動接受請求,現在服務端可以主動的傳送了,也就是推送。

順序:不再是序列,而是可以並行,請求html的同時可以把裡面的js,css進行推送。

在使用者和瀏覽器交換資源的時候是只有請求和響應。而他們之間有乙個傳送通道,就是那個連線。可以一直保持。

http請求是在那個連線上進行傳送的。

tcp連線是在這個之上傳送的,

在tcp連線上面,乙個http可以傳送多個請求。

在http1.0時候,

在http請求建立的時候,就去建立tcp連線,然後這個連線建立完以後,把請求傳送過去,然後伺服器響應了以後這個tcp連線就關閉了。

在http1.1的時候,

這個連線我們可以通過某個方式去宣告,連線就可以保持在那邊。也就是說第乙個請求傳送完了,那個連線建立了保持在那邊,然後第二個請求進來以後,就可以在這個連線上進行乙個傳送。tcp連線是需要三次握手的,三次握手是需要每次傳送請求然後再響應的。這個代價是很大的,就是建立連線。

在http2.0中

tcp連線上的http請求是可以併發的。

就是說我們在同乙個使用者對同乙個伺服器發起乙個網頁請求的時候,只需要乙個tcp連線。

標誌位syn seq數字x一般是1

(1)首先客戶端傳送乙個我要建立資料報的請求,他傳送到服務端,裡面有乙個標誌位,syn=1,還有乙個seq他等於乙個數字,一般來說也等於1.

(2)然後服務端接受到了這個資料報,知道有乙個客戶,他要和我進行連線了,如何進行連線,就會開啟乙個tcp的socket的埠,這個埠開啟以後,返回給客戶端乙個資料報,裡面有乙個syn就是標誌位,還有乙個ack,ack就是第乙個客戶端傳送過來的seq的x+1,還有服務端傳送乙個seq,這個是服務端的seq

(3)然後客戶端拿到這個資料報以後,知道服務端允許我建立這個tcp鏈結了,然後他再傳送他的ack等於seq+1,他的seq又等於乙個新的數字。

三次握手,為了防止伺服器,這邊開始一些無用的連線,網路有延時,中間可能隔的很遠,需要乙個光纖,然後各種中間的**伺服器進行乙個傳輸。

在第二次握手的時候,服務端直接就建立了鏈結,然後返回了內容給客戶端,因為網路傳送,資料報丟手,客戶端就一直沒有接收到伺服器返回的東西。

同時,可能設定了乙個超時時間,關閉了,連線關閉了才發起乙個新的建立連線的請求,服務端不知道,如果沒有三次握手,服務端根本不知道客戶端有沒有接收到,也沒有告訴我要建立還是關閉,埠就一直開著,一直等著客戶端傳送實際的請求,此時服務端開銷就浪費了,他不知道連線建立失敗,可能客戶端已經去傳送新的連線了。所以需要三次握手來確認,來及時發現一些網路問題導致的丟包。

同時埠的連線關閉了也不需要一直等著,三次握手就可以規避網路傳輸中的延時,導致的一些伺服器開銷的問題。

可以通過它很清楚的看到三次握手的過程。

uri:uniform resource identifuer/統一資源標誌符。

用來唯一標識網際網路上的資訊資源,包括url和urn。

url:uniform resource location/統一資源定位器。

有ip,埠,路由,以及傳參,hash,

hash一般前端會作為錨點定位。

urn:永久統一資源定位符,在資源移動之後還能被找到。

從幾個簡單的部分來看,他分為三個部分,首行,頭部,以及內容。

首行可以看到有url,他的方法method(一般作為資源的操作,語義化的描述),以及狀態碼(定義伺服器對請求的處理結果,各個區間的code有各自的語義),address,policy.頭部的比較多,可以看下圖。

關於http協議的整理(二)

目錄 相關知識總結 1.curl獲取頁面頭部資訊 2.cors 3.cors預請求 首先先嘗試執行乙個web服務,通過content type的不同來展示 當出現跨域問題,通過加頭來解決 加了頭部的 access control allow origin 就不再有問題,都可以訪問,也可以通過動態的判...

http協議知識整理

作為web開發人員,了解一些http協議的知識很有必要。本文簡單介紹了http協議的知識,若有錯誤的地方,望大家指正。url的格式 4.1 請求報文格式 4.2 請求報文示例 4.3 請求方法 get和post是最常用的方法,簡單來說,前者用於獲取資料,後者用於提交資料。5.1 響應報文格式 5.2...

關於HTTP協議

http協議 超文字傳輸協議 http是乙個應用層的物件導向的協議,主要特點如下 1 支援伺服器 客戶端模式 2 簡單快捷,客戶請求伺服器,通常只需傳送請求方法和路徑,請求方法包括get,post,put,delete等 3 http協議允許傳送任何型別的資料,json,xml,陣列等 4 http...