一文秒懂HTTP協議到底是什么?原理?

?

目錄

?????????1.什么是http協議?

2.http協議的版本?

3.http文本框架

4.http請求報文

5.http報文格式

6.http響應報文

7.HTTP的狀態碼

8.HTTP首部介紹

9.什么是URL和URI?

10.CGI是什么?


1.什么是http協議?

http:Hyper Text Transfer Protocol 超文本傳輸協議,是互聯網應用最為廣泛的一種網絡協議, 主要用于 Web 服務。通過計算機處理文本信息,格式為 HTML(Hyper Text Mark Language) 超文本標記語言來實現。

2.http協議的版本?

http 0.9:僅于用戶傳輸 html 文檔

http 1.0 :

1.引入了 MIME(Multipurpose Internet Mail Extesions)機制:多用途互聯網郵件擴展,引 入這個技術之后,http 可以發送多媒體(比如視頻、音頻等)信息。此機制讓 http 不在單單只支持 html 格式,還可以支持其他格式來進行發送了。

2.引入了 keep-alive 機制,支持持久連接的功能(但這個 keep-alive 原理是在首部添加了 某個字段而形成的,并非原生就支持此功能)

3.引入支持緩存功能 http 1.1 支持更多的請求方法,更加精細的緩存控制,原生直接支持持久連接功能(presistent)。

http 2.0 :

提供了 HTTP 語義優化的傳輸,spdy : google 引入了的一個技術,能夠加速 http 數據交互, 尤其是使用 ssl 加速機制,但是 spdy 現在用的還不多。

目前常用的版本就是 http 1.0 版本和 http 1.1 版本。

3.http文本框架

<html><head><title></title></head><body><h1>hello</h1></body>
</html>

4.http請求報文

1.request Message(請求報文) 客戶端 -→ 服務器端

由客戶端向服務器端發出請求,不同的網站用于請求不同的資源(html 文檔)

2.response Message(響應報文) 服務器端 -→ 客戶端

是服務器予以響應客戶端的請求

5.http報文格式

請求行+請求頭+空白行+請求實體

?

1.請求行

請求行主要有三部分組成:請求方式+URL字段+HTTP協議版本

?

組成:

<method>:這次請求的方式

<request-URL>:請求資源的路徑

<version>:請求的協議版本

http請求方式: ?

HTTP請求方法描述
GET用于客戶端請求指定資源信息,并返回指定資源的實體
HEAD跟GET相似,但是不需要返回客戶端請求的資源,只返回響應首部,(告訴客戶端我有或者沒有)
POST基于HTML表單向服務器提交數據,通常是需要存儲數據的時候,像mysql存儲
PUT與GET相反,是向服務器發送資源,服務器存儲此數據,像百度網盤,阿里云盤
DELETE請求服務器刪除URL指定的資源
MOVE請求服務器將指定的頁面移至到另一個網絡位置
OPTIONS探測服務器端對請求的URL所支持使用的請求方法
TRACE第一次請求中間所經歷的代理服務器,防火墻或網關等

2.請求頭

請求頭由關鍵字+關鍵字的值組成,直接使用 : 隔開,格式:Name:value,請求頭的作用是通過客戶端將請求的相關內容告知服務器,首部不止有一個。

?

3.空白行

請求頭之后會有一個空白行,通過方式回車和換行字符,用于通知服務器端以下的內容不會再出現請求首部的信息

4.請求實體

真正請求的內容

?

6.http響應報文

格式:起始行 + 響應首部 + 空白行 + 響應實體

?

1.起始行

也被稱為狀態行,用于服務器響應客戶端請求的狀態信息,由版本號<version>+狀態碼<status>+原因短語<reason-phrase>組成

<Version>:響應客戶端請求的是什么版本,服務器就響應什么版本
<status>:狀態碼,200,404等
<reason-phrase>:響應的狀態碼的信息是深, 原因短句
<headers>:一大堆的響應首部
<entity-body>:響應體
2.響應首部

類似于請求報文,起始行后面一般有若干個頭部字段。每一個頭部字段都包含一個名字和一個值。格式:name:value

Content-Type: test/html; charset=utf-8
Content-Length: 78
3.空白行

最后一個響應首部信息之后就是一個空行,通知客戶端無首部信息了

4.響應體

響應實體中裝載了要返回給客戶端的數據,這些數據可以是文本,也可以是二進制

7.HTTP的狀態碼

狀態碼說明
1XX信息性狀態碼,用于指定客戶端相應的某些操作
2XX成功狀態碼,我請求一個資源,這個資源在,這就表示請求成功
3XX重定向的狀態碼,有時會返回一個新的地址
4XX客戶端類錯誤,你請求的資源不存在,或者你請求的時候,我們這個資源拒絕你訪問,你沒有權限
5XX服務器類錯誤信息。向服務器發起請求,服務器發現需要運行一個腳本,從而調用解析庫,如果在調用過程中出錯就會出現這種情況,或者你的腳本有錯誤,也可能導致這種問題
常用狀態碼
狀態碼說明
200服務器成功返回網頁,這是成功的HTTP請求返回的標準狀態碼
201created上傳文件成功后顯示
301Move permanently,永久重定向,會返回一個新地址,并告訴我們你所請求的地址將永久挪到哪個新地址去了
302fonud,臨時重定向,臨時放到某個地方,會在響應報文中使用”location:新位置“
304not modified 資源沒有做任何修改
403forbidden 請求拒絕
404not found 請求資源不存在
405method not allowed 你使用的方法不被允許,不支持
500internal server error:服務器內部錯誤
502Bod gateway,代理服務器從上游服務器收到一條偽響應,上一層服務器返回了一個無法理解的報文,所以代理服務器就會表示錯誤
503serive unavailable,服務暫時不可用

8.HTTP首部介紹

首部的分類:通用首部,請求首部,響應首部,實體首部(專門用來表示實體中資源內部的類型,長度,編碼格式等),擴展首部(非標準首部,可有程序員自行創建)

1.通用首部

? Connection:定義 C/S 之間關于請求、響應的有關選項 在 http1.0 的時候,如果他想使用持久連接,那么他所設置的選項即為 Connection:keep-alive 、

? Cache-Control:緩存控制,實現更精細的緩存控制方式。在 http 1.1 上比較 常見

2.請求首部

? Client-IP :客戶端 IP 地址

? Host :請求的主機,這在實現基于主機名的虛擬主機時很有用

? Referer :指明了請求當前資源原始資源的 URL,使用 referer 是可以防盜鏈

? User-Agent:用戶代理,一般而言是瀏覽器

? Accept 首部:指客戶端可以接受哪些編碼的類型

? Accept:服務端能夠發送的媒體的類型

? Accetp-Charset:接收的字符集

? Accept-Encoding:編碼格式

? Accept-Lanage:所能接受的語言編碼格式

? 條件式請求首部:(在 http1.1 中才會用到)

當發送請求時,先問問對方是否滿足條件,如果滿足條件就請求,不滿足就不請 求

? 跟安全相關的請求:

? Authorization

? Cookie

3.響應首部

? Age:資源響應給你之后可以使用的時長

? Server:向客戶端說明自己用到的程序名稱和版本

? 協商類的首部:

? Vary:首部列表,服務器會根據此列表挑選最適合的版本發給客戶端

? 跟安全相關:

? WWW-Authentication

? Set-Cookie

4.實體首部

? Location:指明資源的新位置,實現 302 響應碼時通常會用到

? Allow:允許對此資源使用的請求方法

? 內容相關的首部

? Content-Encoding

? Content-Language

? Content-Length

? Content-Location:內容所在的位置

? Content-Type

? 緩存相關:

? ETag:擴展標簽/標記

? Expires:過期時間

? Last-Modified:最后修改時間

9.什么是URL和URI?

? URI(Uniform Resource Identifier) 同一資源標示符

用于標識某一互聯網資源名稱的字符串,通過這種標識來允許你用戶對資源可通 過特定的協議進行交互操作。在 Web 上可用的每種資源,包括 HTML 文檔、圖 像、視頻片段、程序等, 由一個通用資源標識符進行定位。所以我們可以使用 URI 來標識每個資源的名稱

? URL(Uniform Resource Locator)(統一資源定位符)

用于描述一個特定服務器上某資源的特定位置。

例如:http://www.baidu.com:80/download/bash-4.3.1-1.rpm

URL 的格式分為三個部分

i. scheme(方案)(也叫協議):http://

ii. Internet 地址:一般這個地址指的是服務器:www.baidu.com:8080

iii. 特定服務器上的資源:download/bash-4.3.1-1.rpm

10.CGI是什么?

Common Gateway Interface 通用網關接口

?

web 服務器發現需要執行腳本了,就通過 CGI 協議跟后端的應用程序打交道, 把用戶的請求動態交給服務器,這個服務器的結果通過 CGI 協議返回給 http 服 務器。

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

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

相關文章

測試架構師如何落地性能測試方案(一)

背景描述&#xff1a; 最近剛接手一個新項目&#xff0c;在最開始的時候要求對這個項目做性能測試&#xff0c;產品經理也給不出性能需求&#xff0c;只因為這個項目是電商項目&#xff0c;可能會有高并發&#xff0c;秒殺的場景&#xff0c;所以產品經理要求我們對這個項目必…

vue3父子組件傳值;vue3子組件傳值給父組件;vue3子組件監聽父組件接口傳值;父子組件事件調用

代碼在文末&#xff0c;均可直接復制使用 本文主要描述&#xff0c;父子組件傳值、調用等問題 文章目錄 問題1&#xff1a;子組件接收不到父組件傳值問題2&#xff1a;子組件接受的值&#xff0c;修改后&#xff0c;發現父組件值也改變了問題3&#xff1a;子組件接受值&#xf…

07-HDFS入門及shell命令

1 文件系統 是一種存儲和組織數據的方法&#xff0c;它使得文件訪問和查詢變得容易使得文件和樹形目錄的抽象邏輯概念代替了磁盤等物理設備使用數據塊的概念&#xff0c;用戶使用文件系統來保存數據不必關心數據底層存在硬盤哪里&#xff0c;只需記住這個文件的所屬目錄和文件…

STM32基于CubeIDE和HAL庫 基礎入門學習筆記:物聯網項目開發流程和思路

文章目錄&#xff1a; 第一部分&#xff1a;項目開始前的計劃與準備 1.項目策劃和開發規范 1.1 項目要求文檔 1.2 技術實現文檔 1.3 開發規范 2.創建項目工程與日志 第二部分&#xff1a;調通硬件電路與驅動程序 第三部分&#xff1a;編寫最基礎的應用程序 第四部分&…

opencv帶GStreamer之Windows編譯

目錄 1、下載GStreamer和安裝2. GSTReamer CMake配置3. 驗證是否配置成功 1、下載GStreamer和安裝 下載地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安裝目錄無要求&#xff0c;主要是安裝完設置環境變量 xxx\1…

【css】漸變

漸變是設置一種顏色或者多種顏色之間的過度變化。 兩種漸變類型&#xff1a; 線性漸變&#xff08;向下/向上/向左/向右/對角線&#xff09; 徑向漸變&#xff08;由其中心定義&#xff09; 1、線性漸變 語法&#xff1a;background-image: linear-gradient(direction, co…

一圖搞懂二層交換機、三層交換機和路由器的區別

二層交換機、三層交換機、路由器的區別 二層交換機、三層交換機、路由器對比二層交換機三層交換機路由器工作在第幾層數據鏈路層&#xff08;第二層&#xff09;網絡層&#xff08;第三層&#xff09;網絡層&#xff08;第三層&#xff09;功能學習和轉發幀根據IP地址轉發數據…

數據鏈路層是什么?

數據鏈路層承接上層的數據&#xff0c;然后使用下層提供的信道&#xff0c;按照一定的規則&#xff0c;進行數據傳輸。 物理層提供了傳輸媒體與連接&#xff08;信道&#xff09;&#xff08;數據鏈路層使用的信道通常是物理層提供的信道&#xff09;&#xff0c;即提供了比特…

webpack自動注冊全局組件

例如&#xff0c;在form文件夾下有許多流程類表單&#xff0c;一個一個注冊引入非常浪費時間&#xff0c;可使用webpack的require.context方法來自動導入 import { firstToUpper } from /utils/methodsconst taskTable {install: vue > {const req require.context(../fo…

springboot結合element-ui實現增刪改查,附前端完整代碼

實現功能 前端完整代碼 后端接口 登錄&#xff0c;注冊&#xff0c;查詢所有用戶&#xff0c;根據用戶名模糊查詢&#xff0c;添加用戶&#xff0c;更新用戶&#xff0c;刪除用戶 前端 注冊&#xff0c;登錄&#xff0c;退出&#xff0c;用戶增刪改查&#xff0c;導航欄&#…

Android Sutdio 導入libs文件夾下的jar包沒反應

有點離譜&#xff0c;笨笨的腦子才犯的錯誤 首先發現問題&#xff1a;轉移項目的時候 直接復制粘貼libs文件夾下的jar包到新項目&#xff0c;在build.gradle文件下 使用語句并應用也沒反應&#xff08;jar包沒有出現箭頭且代碼報錯&#xff0c;找不到&#xff09; implementa…

什么樣的 PLC 可以算是高端 PLC?

針對問題本身&#xff0c;有的回答里都提到了。可靠性&#xff0c;掃描時間&#xff0c;帶離散量點數&#xff0c;帶模擬量輸出點數&#xff0c;擴展性&#xff0c;這些都可以看作PLC系統級別劃分的依據。比如說&#xff0c;有相應安全完整性等級認證的LOGIC SOLVER為核心的PLC…

SpringBoot復習:(37)自定義ErrorController

所有接口統一返回的數據格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…

五個獨特且有趣的ChatGPT指令

今天分享5個很實用的指令&#xff0c;這幾個指令很多時候對我們輸出內容的連貫性、文章風格、創意性等方面有著決定性的作用。 目錄 第一個&#xff1a;Max tokens&#xff08;最大令牌&#xff09; 第二個&#xff1a;Top_p(控制采樣) 第三個&#xff1a;Presence_penalty …

Android Studio System.out.println()中文亂碼

第一步&#xff1a; 打開studio64.exe.vmoptions加入-Dfile.encodingUTF-8 第二步&#xff1a; File-Settings-Editor-File Encodings 把所有的編碼格式改為UTF-8 嘗試跑一下代碼&#xff0c;如果還不行&#xff0c;重啟IDE 再試試。

UI美工設計崗位的工作職責

UI美工設計崗位的工作職責1 職責&#xff1a; 1、負責軟件界面的美術設計、創意工作和制作工作; 2、根據各種相關軟件的用戶群&#xff0c;提出構思新穎、有高度吸引力的創意設計; 3、對頁面進行優化&#xff0c;使用戶操作更趨于人性化; 4、維護現有的應用產品; 5、收集和…

NLP文本匹配任務Text Matching [無監督訓練]:SimCSE、ESimCSE、DiffCSE 項目實踐

NLP文本匹配任務Text Matching [無監督訓練]&#xff1a;SimCSE、ESimCSE、DiffCSE 項目實踐 文本匹配多用于計算兩個文本之間的相似度&#xff0c;該示例會基于 ESimCSE 實現一個無監督的文本匹配模型的訓練流程。文本匹配多用于計算兩段「自然文本」之間的「相似度」。 例如…

一百五十三、Kettle——Linux上安裝的kettle9.3啟動后說缺少libwebkitgtk-1.0(真是坑爹啊,剛龜速下載又忍痛卸載)

一、問題 在kettle9.3可以在本地連接hive312后&#xff0c;在Linux中安裝了kettle9.3&#xff0c;結果啟動時報錯WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable 而且如果直接下載libwebkitgtk的話也沒有用 [roothurys22 data-integration]# yu…

Python學習筆記第五十六(Pandas JSON)

Python學習筆記第五十六天 Pandas JSONread_json()to_string()字典轉為 DataFrame 數據 內嵌的 JSON 數據json_normalize() 后記 Pandas JSON JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript 對象表示法&#xff09;&#xff0c;是存儲和交換文本信息的語…

在線吉他調音

先看效果&#xff08;圖片沒有聲&#xff0c;可以下載源碼看看&#xff0c;比這更好~&#xff09;&#xff1a; 再看代碼&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…