HTTP報文

HTTP報文

報文流

HTTP報文是在HTTP引用程序之間發送的數據塊,這些數據塊以一種文本形式的元信息開頭,這些信息描述了報文的內容和含義,后面跟著可選的數據部分,這些報文在客戶端,服務器和代理之間流動。

報文流入源端服務器

HTTP使用屬于流入和流出來描述事務處理的方向,報文流入源端服務器,工作完成之后,會流入用戶的Agent代理中。
在這里插入圖片描述

報文向下游流動

HTTP報文會像下游流動,所有報文的發送者在接收者的上游。對于請求報文來說,代理1在代理2的上游
在這里插入圖片描述

報文的組成部分

HTTP報文是簡單的格式化數據塊,每條報文都包含一條來自客戶端的請求,或者一條來自服務器的響應。由三部分組成: 對報文進行描述的起始行,包含屬性的首部塊,已經可選的,包含數據的主體部分。
在這里插入圖片描述

起始行和首部都是由行分割的ascii文本。每行都以一個或者兩個字符組成的行終止序列作為結束,包括一個回車符和一個換行符。這個行終止序列被寫作crlf。有些老的,或者不完整的HTTP引用程序不會總是發送回車符,又發送換行符。
使用的主體或者報文的主體是一個可選的數據塊,與起始行和首部不同的是,主題中可以包含文本或者二進制數據,也可以為空。

報文的語法

所有的HTTP報文請求可以分為兩類: 請求報文和響應報文。請求報文會向web服務器請求一個動作,響應報文會將請求的結果返回給客戶端,請求和響應報文的基本報文結構都是相同的。
在這里插入圖片描述

// 請求報文
<method> <request-URL> <version>
<headers>
<entity-body>
// 響應報文
<version> <status> <reason-phrarse>
<headers>
<entity-body>

方法: 客戶端希望服務器對資源執行的動作
請求URL: 命名了請求資源,或者URL路徑組件的完整URL,如果直接和服務器進行對話,只要URL的路徑組件是資源的絕對路徑。
版本: HTTP版本
狀態碼: 每個狀態碼中的第一位都用來描述狀態的一般類別。
原因短語: 數字狀態碼的可讀版本,包含行終止序列之前的所有文本。
首部: 可以有零個或者多個首部,每個首部包含一個名字,后面跟著一個冒號。然后是可選的空格,接著是一個只,最后是一個CRLF。
實體的主體部分: 實體的主體部分包含一個有任意數據組成的數據塊,并不是所有報文都包含實體的組成部分。

起始行

所有的http報文都是以一個其實作為開始,請求報文的起始行說明了要做些什么,響應報文的起始行說明發生了什么

請求行

請求報文請求服務器對資源進行一些操作,請求報文的起始行,或者請求行,包含了一個方法和一個請求URL,這個方法描述了服務器應該執行的操作。請求URL描述了要對那個資源執行這個方法,請求行中包含HTTP的版本。用來告知服務器,客戶端使用的是那種HTTP

響應行

響應報文承載了狀態信息和操作產生的所有結果數據。將其返回給客戶端,響應報文的起始行,或者稱為響應行,包含了響應報文的HTTP版本,數字狀態碼,以及描述操作狀態的文本形式的原因短語
所有這些字符都由空格符進行分割。

方法

請求的起始行以方法作為開始,方法告知服務器要做些什么
在這里插入圖片描述

狀態碼

方法是用來告訴服務器做什么事情的,狀態碼是告訴客戶端,發生了什么事情,狀態碼位于響應的起始行中。
狀態碼是在每條響應報文的起始行中返回的,會返回一個數字狀態和一個可讀的狀態。數字碼便于沉痼進行差錯管理,而原因短語便于人們理解
通過三位數字代碼對不同的狀態進行分類。200-299之間的狀態碼表示成功,300-399表示資源被遷移走,400-499表示客戶端的請求發生了錯誤,500-599表示服務器出現了錯誤
在這里插入圖片描述

原因短語

原因短語是響應起始行中的最后一個組件,為狀態碼提供了文本形式的解釋。

版本號

首部

首部分類

HTTP規范定義了首部字段,應用程序也可以隨意發明自己所用的首部

  • 通用首部:可以出現在請求報文中,也可以出現在響應報文中
  • 請求首部: 提供更多有關請求的信息
  • 響應首部: 提供更多有關的響應星系
  • 實體首部: 描述主體的長度和內容,或者資源本身
  • 拓展首部: 規范中沒有定義過的新首部。
    語法:名字:可選空格 字段值 CRLF
首部延續行

將長的首部行為分為多行可以提高可讀性,多出來的每行前面至少有一個空格或者制表符。

HTTP/1.0 200 OK    
Content-Type: image/gif    
Content-Length: 8572    
Server: Test Server    
Version 1.0    
實體的主體部分

HTTP報文的第三部分就是可選的實體主體部分,實體的主體是HTTP報文的負荷,就是HTTP要傳輸的內容
HTTP報文可以承載很多類型的數字數據: 圖片,視頻, HTML文檔, 軟件應用程序, 信用卡事務, 電子郵件等

版本0.9的報文

HTTP/0.9報文也都是由請求和響應組成,但是請求中只包含方法和請求URL,響應中只包含實體,沒有版本信息,沒有狀態碼或原因短語,也沒有首部。
在這里插入圖片描述

方法

安全方法

HTTP定義了一組被安全方法的方法。GET方法和HEAD方法都被認為是安全的。

GET

GET是最常用的方法,通常用于請求服務器發送某個資源,HTTP/1.1要求服務器實現此方法。
在這里插入圖片描述

HEAD

HEAD方法和GET方法的行為很類似,但是服務器在響應中只能返回首部,不會返回實體的主體部分,這就允許客戶端在沒有獲取實際資源的情況下,對資源的首部進行檢查。

  1. 在不獲取資源的情況下了解資源的情況
  2. 通過查看響應中的狀態碼,查看對象是否存在
  3. 查看首部,檢查資源是否被改變
    在這里插入圖片描述
PUT

與GET從服務器中讀取文檔相反,PUT方法會向服務器中寫入文檔。 PUT方法就是讓服務器用請求的主體部分來創建一個由所請求的URL命名的新的文檔,或者,如果URL已經存在的話,就用這個主體代替它。

在這里插入圖片描述

POST

post方法起初是用來向服務器輸入數據的。

TRACE

客戶端發起一個請求時,這個請求可能要穿過防火墻、代理、網關或其他一些應用程序。每個中間節點都可能會修改原始的HTTP請求。
TRACE 請求會在目的服務器端發起一個“環回”診斷。行程最后一站的服務器會彈回一條 TRACE 響應,并在響應主體中攜帶它收到的原始請求報文。這樣客戶端就可以查看在所有中間 HTTP 應用程序組成的請求/響應鏈上,原始報文是否,以及如何被毀壞或修改過
在這里插入圖片描述

TRACE的方法主要用于診斷,用于驗證請求是否如愿穿過了請求/響應鏈。可以用來查看代理或者其他應用程序對用戶請求產生的效果

OPTIONS

OPTIONS方法請求對web服務器告知其支持的各種功能,可以詢問服務器支持的方法。
在這里插入圖片描述

DELETE

DELETE方法所做的事情就是請服務器刪除請求URL所指定的資源。但是客戶端應用程序無法保證刪除操作一定會被執行。HTTP規范允許服務器在不通知客戶端的情況下撤銷請求。
在這里插入圖片描述

狀態碼

100 —— 199 信息性狀態碼

HTTP/1.1 向協議中引入了信息性狀態碼,這些狀態碼相對較新。
100:HTTP客戶端應用程序中有一個實體的主體部分要發送給服務器,但是希望在發送之前查看一下服務器是否會接受這個實體。

客戶端與100Continue

如果客戶端在向服務器發送一個實體,并且愿意在發送實體之間等待100 continue響應,客戶端發送一個攜帶了100 continue的expect請求首部。如果客戶端不發送實體,就不應該發送100continue expect首部,這樣會使得服務器誤以為客戶端要發送一個實體。
100 continue 是一種優化,客戶端應用程序只有在避免向服務器發送一個服務器無法處理或者使用的大實體的時候,才使用100continue

代理與100continue

如果代理從服務器受到了一條帶有100 continue期望的請求,如果不知道版本,應該將expect首部放在請求中向下轉發。HTTP/1.1 用417 Expectation Failed
代理決定代表http1.0或之前版本兼容的客戶端,在其請求中放入expect首部和100continue值,不會講100 Continue響應轉發給客戶端。

200 ~ 299 ——— 成功狀態碼

在這里插入圖片描述

300 ~ 399 ——— 重定向狀態碼

如果資源已經被移動,可以發送一個重定向狀態碼和一個可選的Loacation首部來告訴客戶端資源已經被移走,以及現在的位置。
在這里插入圖片描述

可以通過某些重定向狀態碼對資源的應用程序本地副本和源端服務器上的資源進行驗證。對于那些包含了重定向的非HEAD請求進行響應的時候,需要包含一個實體,并且在實體中包含描述信息和指向多個重定向的URL的連接。
在這里插入圖片描述

在這里插入圖片描述

302 303 307狀態碼存在一些交叉,主要源于HTTP/1.0和HTTP/1.1應用程序對這些狀態碼處理方式不同
當HTTP/1.0客戶端發起一個post請求,并且在響應中受到302重定向狀態碼的時候,會接收到Location首部的重定向URL,并且這些URL發起一個GET請求。
HTTP/1.0服務器受到來自HTTP/1.0客戶端的POST請求之后發送302狀態碼,服務器希望客戶端能夠接受重定向URL,并且向重定向的URL發送一個GET請求
對于HTTP/1.1客戶端,用307狀態碼取代302,稱為臨時重定向。服務器可以講302保留起來,為HTTP/1.0進行使用。

400 ~ 499 ——— 客戶端錯誤狀態碼

在這里插入圖片描述

在這里插入圖片描述

500 ~ 599 ——— 服務器錯誤狀態碼

代理嘗試代表客戶端與服務器進行交流,代理會發布5XX服務器錯誤狀態碼來描述所遇到的問題。
在這里插入圖片描述

在這里插入圖片描述

首部

首部和方法配合工作,決定了客戶端和服務器能做什么事情。

  • 通用首部: 客戶端和服務器都可以使用的通用首部
  • 請求首部: 請求首部是請求報文中特有的,為服務器提供了一些額外的信息。
  • 響應首部: 為客戶端提供信息。
  • 實體首部: 實體首部是對實體主體部分的首部
  • 擴展首部: 擴展首部是非常標準的首部,未被添加到已批準的HTTP規范中,但是HTTP程序會接受他們并對其進行轉發

通用首部

有些首部提供了與報文相關的最基本的信息,它們被稱為通用首部
在這里插入圖片描述

通用緩存首部

http/1.0 引入了一個允許http應用程序緩存對象本地副本的首部,這樣不需要從源服務器獲取了,最新的http版本有非常豐富的緩存參數集
在這里插入圖片描述

請求首部

請求首部只是在請求報文中有意義的首部,用于說明是誰或什么在發送請求,請求源自何處,或者客戶端的喜好以及能力。
在這里插入圖片描述

Accept首部

Accept首部: 媒體類型, 字符集, 編碼方式, 語言, 拓展傳輸編碼
在這里插入圖片描述

條件請求首部

為請求加上限制。
在這里插入圖片描述

安全請求首部

要求客戶端在獲取資源之前,先對自身進行認真,使得事務安全。
在這里插入圖片描述

代理請求首部

在這里插入圖片描述

響應首部

為客戶端提供一些額外的信息。
在這里插入圖片描述

協商首部

HTTP/1.1可以為服務器和客戶端提供對資源進行協商的能力。
在這里插入圖片描述

安全響應首部

在這里插入圖片描述

實體首部

由于請求和響應報文中都可能包含實體部分,所以在這兩種類型的報文中都可能出現這些首部
實體首部可以告知報文的接收者它在對什么進行處理
在這里插入圖片描述

內容首部

在這里插入圖片描述

實體緩存首部

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19076.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git更改本地項目關聯到新倉庫

刪除現在遠程關聯的倉庫 git remote rm origin鏈接新倉庫 git remote add origin url(需要關聯的新倉庫地址)代碼提交到遠程倉庫master分支 git push --set-upstream origin master本地分支更新同步至遠程倉庫 比如本地有dev分支 git push origin dev:dev

前端項目開發,3個HTTP請求工具

這一小節&#xff0c;我們介紹一下前端項目開發中&#xff0c;HTTP請求會用到的3個工具&#xff0c;分別是fetch、axios和js-tool-big-box中的jsonp請求。那么他們都有哪些小區別呢&#xff1f;我們一起來看一下。 目錄 1 fetch 2 axios 3 js-tool-big-box 的 jsonp 請求 …

拷貝構造、移動構造、拷貝賦值、移動賦值

最近在學習C的拷貝構造函數時發現一個問題&#xff1a;在函數中返回局部的類對象時&#xff0c;并沒有調用拷貝構造函數。針對這個問題&#xff0c;查閱了一些資料&#xff0c;這里記錄整理一下。 調用拷貝構造函數的三種情況&#xff1a; ① 用一個類去初始化另一個對象時&a…

【數據結構與算法 | 基礎篇 | 隊列篇】力扣102, 107

1. 力扣102 : 二叉樹的層序遍歷 (1). 題 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;[[3]…

對于高速信號完整性,一塊聊聊啊(18)

本文摘錄一篇Allegro進行后仿真的完整流程,可能allegro版本有點老,但整個過程還是描述比較詳細的。 目錄 1、獲取IBIS模型 1.1模型下載 1.2檢查IBIS模型 1.3IBIS轉換為DML 1.4保存DML模型 2、仿真準備 2.1疊層設置 2.2電源網格設置 2.3仿真庫配置 3、仿真 3.1拓撲…

刷爆leetcode第六期

題目一 用隊列實現棧 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。 實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。 int pop() 移除…

【漏洞復現】大華智能物聯綜合管理平臺 fastjson遠程代碼執行漏洞

0x01 產品簡介 大華ICC智能物聯綜合管理平臺對技術組件進行模塊化和松耦合&#xff0c;將解決方案分層分級&#xff0c;提高面向智慧物聯的數據接入與生態合作能力。 0x02 漏洞概述 由于大華智能物聯綜合管理平臺使用了存在漏洞的Fastson組件,未經身份驗讓的攻擊者可利用 /e…

M功能-支付平臺(六)

target&#xff1a;離開柬埔寨倒計時-217day 今天突然發現我在csdn居然把我ip屬地搞出來了&#xff0c;之前都沒注意到&#xff0c;哎 前言 M功能演示版本做到后期(也就是第二周的后面3天)真的很心酸&#xff0c;這邊安排的4后端后面都放棄了&#xff0c;覺得做不出來&#…

ARM-V9 RME(Realm Management Extension)系統架構之系統能力的內存隔離和保護

安全之安全(security)博客目錄導讀 目錄 一、內存隔離和保護 1、顆粒PAS過濾Granular PAS filtering 2、Cache的一致性維護 2.1 物理別名點 Point of Physical Aliasing (PoPA) 2.2 加密點 3、內存(DRAM)保護 3.1 內存加密和完整性 3.2 DRAM scrubbing 本博客探討 RME…

網絡編程 —— Http使用httpClient實現頁面爬蟲

先去找類型的a標簽 取出圖片所在網址 取出https://desk.3gbizhi.com/deskMV/438.html 搭建Form界面 Http類 public static HttpClient Client { get; } static Http() {HttpClientHandler handler new HttpClientHandler();//處理消息對象//ServerCertificateCustomValidat…

安卓手機APP開發___設置鬧鐘

安卓手機APP開發___設置鬧鐘 目錄 概述 設置不精確鬧鐘 在特定時間后發出鬧鐘 在特定時間范圍內觸發鬧鐘 以大致有規律的時間間隔響起重復鬧鐘 設置精確的鬧鐘 系統會在未來的某個精確時刻調用精確鬧鐘。 可能不需要精確鬧鐘的用例 設置精確鬧鐘的方法 系統資源消耗…

萬億應急國債項目之通信指揮類應急裝備多鏈路聚合通信設備在應急行業中的重要作用

萬億應急國債項目的推出&#xff0c;無疑是我國在應急領域的一次重大舉措。在這一宏大藍圖中&#xff0c;通信指揮類應急裝備的多鏈路聚合通信設備顯得尤為重要&#xff0c;其在應急行業中所發揮的作用&#xff0c;堪稱不可或缺的關鍵一環。 通信指揮是應急響應中的核心環節&a…

QT C++ 讀寫mySQL數據庫 圖片 例子

在上篇文章中描述了怎樣搭建讀寫數據庫的環境。 本文更進一步&#xff0c;描述了讀寫mySQL數據庫&#xff0c;字符、整型數字、圖片。讀寫圖片相對難點。 數據庫的圖片字段用BLOB&#xff0c;如果圖片較大要用longblob,否則會報錯。 另外&#xff0c;讀寫數據庫都使用了短連…

Pytorch 星號*放在tensor前的作用

假如有一個多維tensor&#xff0c;名為id&#xff0c;那么*id的意思是什么呢&#xff1f; GPT答&#xff1a; 如果 id 是一個多維張量&#xff0c;那么 *id 在這種情況下會將這個多維張量解包成一個張量序列&#xff0c;其中每個元素都是一個更低維度的張量。具體來說&#x…

圖形學初識--空間變換

文章目錄 前言正文矩陣和向量相乘二維變換1、縮放2、旋轉3、平移4、齊次坐標下總結 三維變換1、縮放2、平移3、旋轉繞X軸旋轉&#xff1a;繞Z軸旋轉&#xff1a;繞Y軸旋轉&#xff1a; 結尾&#xff1a;喜歡的小伙伴可以點點關注贊哦 前言 前面章節補充了一下基本的線性代數中…

前端Vue小兔鮮兒電商項目實戰Day02

一、Pinia快速入門 此處見&#xff1a;Vue從入門到實戰Day12-CSDN博客 二、創建項目并精細化配置 1. 創建項目 2. src目錄調整 ①刪除一些初始化的默認文件 清空assets、components、store、views文件夾下的內容&#xff1b; ②修改剩余代碼內容 router/index.js import …

一個程序員的牢獄生涯(44)詢問

星期一 詢 問 在號子里開始了下午坐班的時候,過道內的大鐵柵欄被管教打開,我聽到開鎖的聲音后,心里變得激動起來。盼望著腳步聲能停在我們的號子門口,然后打開鐵門,喊一聲“眼鏡,出來!”。 通道內這次進來的是秦所,但他并沒有在我們號子門口停留,只是在走過的時候,低…

華為昇騰310 ATC模型轉換工具安裝

參考: https://bbs.huaweicloud.com/blogs/393282?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content https://www.hiascend.com/document/detail/zh/canncommercial/601/inferapplicationdev/atctool/atctool_0004.html 1、基本工具…

js知識點之閉包

閉包 什么是閉包 閉包&#xff0c;是 JavaScript 中一個非常重要的知識點&#xff0c;也是我們前端面試中較高幾率被問到的知識點之一。 打開《JavaScript 高級程序設計》和《 JavaScript 權威指南》&#xff0c;會發現里面針對閉包的解釋各執一詞&#xff0c;在網絡上搜索關…

Java中如何指定jdk的版本運行jar包

你的jdk安裝的目錄\bin\java -jar 你的jar包名字.jar 這是我的代碼示例 C:\Users\86177\.jdks\corretto-17.0.10\bin\java -jar big_event_study2-0.0.1- SNAPSHOT.jar