HTTP特點與報文解析

2021-10-03 05:01:56 字數 4248 閱讀 3745

http允許傳輸任意型別的物件

正在傳輸的型別有content-type(content-type是http包中用來表示內容型別的標識)加以標記

無連線的含義是限制每次連線只處理乙個請求

伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線

採用這種方式可以節省傳輸時間

http是無狀態協議

無狀態是指協議對於事物處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。

另一方面,在伺服器不需要先前資訊時它的應答就較快。

uri:乙個緊湊的字串用來標示抽象或物理資源

a uri可以進一步被分為定位符、名字或兩者都是

術語」uniform resource locator」(url)是uri的子集,除了確定乙個資源,還提供一種定位該資源的主要訪問機制(如其網路「位置」)

維基百科:

uri可以分為url,urn或同時具備locators和names特性的乙個東西

urn作用就好像乙個人的名字,url就像乙個人的位址

換句話說:urn確定了東西的身份,url提供了找到它的方式

url是uri的一種,但不是所有uri都是url

uri和url最大的差別是「訪問機制」

urn是唯一標識的一部分,是身份資訊

報文第一行:報文協議及版本 狀態碼及狀態描述

http報文頭大體可以分為四類,分別是:

通用報文頭、請求報文頭、響應報文頭和實體報文頭

在http/1.1裡一共規範了47種報文頭欄位

作用:瀏覽器可以接受的**型別

accept:text/html 代表瀏覽器可以接受伺服器回發的型別為text/html也就是我們常說的html文件,如果伺服器無法返回text/html型別的資料,伺服器應該返回乙個406錯誤(non acceptable)

accept: */*代表瀏覽器可以處理所有型別

如果想要給顯示的**型別增加優先順序,則使用q=來額外表示權重值;權重時q的範圍時0-1(可精確到小數點後3位),且1為最大值。不指定權重q值時,預設權重為q=1.0。當伺服器提供多種內容時,將會首先返回權重值最高的**型別。

accepte-encoding

作用:瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支援壓縮,支援什麼壓縮方法(gzip,deflate)

accepte-language

作用:瀏覽器申明自己接收的語言

accepte-language: zh-cn,zh;q=0.7,en-us,en;q=0.3

客戶端在伺服器有中文版資源的情況下,會請求其返回中文版對應的響應,沒有中文版時,則請求返回英文版響應

connection

connection: keep-alive 當乙個網頁開啟完成後,客戶端和伺服器之間用於傳輸http資料的tcp連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連線

connection: close代表乙個request完成後,客戶端和伺服器之間用於傳輸http資料的tcp連線會關閉,當客戶端再次傳送request,需要重新建立tcp連線。

host

作用:請求報頭域主要用於指定被請求資源的internet主機和埠號,它通常從http url中提取出來的

我們在瀏覽器中輸入:

瀏覽器傳送的請求訊息中,就會包含host請求報頭域,如下:host: www.fljf.com:8080

referer

當瀏覽器向web伺服器傳送請求的時候,一般會帶上referer,告訴伺服器我是從哪個頁面鏈結過來的,伺服器藉此可以獲得一些資訊用於處理

user-agent

作用:告訴http伺服器,客戶端使用的作業系統和瀏覽器的名稱和版本

很多情況下我們會通過user-agent來判斷瀏覽器型別,從而進行不同的相容設計

content-type響應頭 響應體

報文第一行:報文協議及版本 狀態碼及狀態描述

響應體http/1.1常用方法

getpost

puthead

delete

options

trace

connect

getget獲取資源

get方法用來請求訪問已被uri識別的資源

指定的資源經伺服器端解析後返回響應內容

get方法也可以用來提交表單和其他資料

從上面的url請求中,很容易就可以辨認出表單提交的內容

同時,瀏覽器對提交url的長度也有所限制

post

post方法與get功能類似,一般用來傳輸實體的主體

post方法的主要目的不是獲取響應主體的內容

post時資料不再是url的一部分,而是標準資料傳輸,同時提高了安全性

put從客戶端向伺服器傳送的資料取代指定的文件的內容

put方法與post方法最大的不同是:put是冪等的,而post是不冪等的

因此,我們更多時候將put方法用作傳輸資源

後端**可以用post完成更新物件,所以基本不用put了

head

類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭

經常用來測試超連結的有效性

delete

請求伺服器刪除指定的資源

options

用來查詢針對請求uri指定的資源支援的方法(支援哪些http方法)

trace/connect

trace:

回顯伺服器收到的請求,主要用於測試或診斷

connect:

開啟乙個客戶端與所請求資源之間的雙向溝通的通道,它可以用來建立隧道

狀態碼是用以表示網頁伺服器超文字傳輸協議響應狀態的3位數字**

1xx 表示訊息。這一型別的狀態碼,代表請求已經被接受,需要繼續處理。這類響應式臨時響應,只包含狀態行和某些可選的響應頭資訊,並以空行結束。

2xx 表示成功。這一型別的狀態碼,代表請求已經成功被伺服器接收、理解、並接受。

3xx 表示重定向。這類狀態碼代表需要客戶端採取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,後續的請求位址(重定向目標)在本次響應的location域中指明。

4xx 表示請求錯誤。這類狀態碼代表客戶端看起來可能發生了錯誤,妨礙了伺服器的處理。除非是乙個head請求,否則伺服器就應該返回乙個解釋當前錯誤狀況的實體,以及這是臨時的還是永久性的狀況。這些狀態碼適用於任何請求方法。瀏覽器應當向使用者顯示任何包含在此類錯誤響應中的實體內容。

5xx 表示伺服器錯誤。這些狀態碼代表了伺服器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是伺服器意識到以當前的軟硬體資源無法完成對請求的處理。除非這是乙個head請求,否則伺服器應當包含乙個解釋當前錯誤狀態以及這個狀況是臨時的還是永久的解釋資訊實體。瀏覽器應當向使用者展示任何在當前響應中被包含的實體。

200 ok 請求已成功,請求所希望的響應頭或資料體將隨此響應返回

202 accepted 已接受,已經接受請求,但未處理完成

206 partial content 部分內容,伺服器成功處理了部分get請求

301 moved permanently 永久移動,請求的資源已被永久的移動到新uri,返回資訊會包括新的uri,瀏覽器會自動定向到新uri。今後任何新的請求都應使用新的uri代替。

302 found 臨時移動,與301類似。但資源只是臨時被移動。客戶端應繼續使用原有uri

400 bad request 客戶端請求的語法錯誤,伺服器無法理解

401 unauthorized 請求要求使用者的身份認證

403 forbidden 伺服器理解請求客戶端的請求,但是拒絕執行此請求

404 not found 伺服器無法根據客戶端的請求找到資源(網頁)

500 internal server error 伺服器內部錯誤,無法完成請求

502 bad gateway 充當閘道器或**的伺服器,從遠端伺服器接收到了乙個無效的請求。

HTTP特點 URL 報文

支援客戶 伺服器模式 客戶 伺服器模式工作的方式是由客戶端向伺服器發出請求,伺服器響應請求,並進行相應服務 簡單快速靈活 http允許傳輸任意型別的物件 正在傳輸的型別有content type content type是http包中用來表示內容型別的標識 加以標記 無連線 無連線的含義是限制每次連...

HTTP報文解析

超文字傳輸協議 hypertext transfer protocol,簡稱http 是應用層協議。http 是一種請求 響應式的協議,即乙個客戶端與伺服器建立連線後,向伺服器傳送乙個請求 伺服器接到請求後,給予相應的響應資訊。http請求報文分為三部分 請求行 請求頭部 請求包體 由方法字段 ur...

http多chunk報文C 解析

專案需要c 實現http報文的收發,網上找了下發現沒有合適的,自己動手寫了個。可解析如下兩類報文 1.乙個報文包含多個chunk 2.乙個chunk包含在多個報文中 極端情況下,乙個報文只含有乙個位元組 如下 解析函式 狀態跳轉,設定狀態 ptask m head processing false ...