【Linux網絡與網絡編程】06.應用層協議HTTP

前言

雖然應用層協議是我們程序猿自己定的,但實際上已經有大佬們定義了一些現成的又非常好用的應用層協議供我們直接參考使用,HTTP(超文本傳輸協議)就是其中之一。

在互聯網世界中,HTTP(HyperText Transfer Protocol,超文本傳輸協議)是一個至關重要的協議。它定義了客戶端(如瀏覽器)與服務器之間如何通信以交換或傳輸超文本(如 HTML 文檔)。 HTTP 協議是客戶端與服務器之間通信的基礎。客戶端通過HTTP協議向服務器發送請求,服務器收到請求后處理并返回響應。HTTP協議是一個無連接、無狀態的協議,即每次請求都需要建立新的連接,且服務器不會保存客戶端的狀態信息。

1. URL

1.1 url 的認識

平時我們俗稱的 "網址" 其實就是說的 URL(Uniform Resource Locator,統一資源定位符)
下圖就是一個URL的常見格式:

認識:

1. 我們上網的行為,本質就是IO。(我的數據給別人,別人的數據給我)

2. 我們上網所獲得的圖片、音頻、文本等都是資源。

3. 我們想要通過網絡獲取資源,首先就需要確定資源在哪臺服務器(IP+端口號),在什么路徑下(linux的文件路徑,這里的路徑指的是web根目錄),于是就有了URL。

4. 成熟的應用層協議往往都與端口號是強關聯的,所以不需要指明端口號。

1.2?urlencode 和 urldecode

像 / ? : 等這樣的字符,已經被 url 當做特殊意義理解了,因此這些字符不能隨意出現。比如,某個參數中需要帶有這些特殊字符,就必須先對特殊字符進行轉義,轉義的規則如下:將需要轉碼的字符轉為16進制,然后從右到左,取 4 位(不足 4 位直接處理),每 2 位做一位,前面加上%,編碼成%XY格式。urldecode 就是 urlencode 的逆過程。例如:

2. HTTP協議的宏觀格式

HTTP不想依賴任何的庫所以自己做了序列化和反序列化。

2.1 HTTP的請求行與狀態行

2.1.1 請求方法

請求方法中最常用的就是 GET 方法和 POST 方法。

GET和POST方法的區別:

??相同點:兩者均用于請求url的指定資源。

??不同點:GET方法請求的資源,參數附加在URL中(如??name=Alice&age=20),可見且長度受限。POST方法請求的資源,參數封裝在請求正文中,不可見且理論上無大小限制。

2.1.2 HTTP的狀態碼

最常見的狀態碼, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

狀態碼含義應用樣例
100Continue上傳大文件時,服務器告訴客戶端可以 繼續上傳
200OK訪問網站首頁,服務器返回網頁內容
201Created發布新文章,服務器返回文章創建成功 的信息
204No Content刪除文章后,服務器返回“無內容”表示操 作成功
301Moved Permanently網站換域名后,自動跳轉到新域名;搜 索引擎更新網站鏈接時使用
302Found 或 See Other用戶登錄成功后,重定向到用戶首頁
304Not Modified瀏覽器緩存機制,對未修改的資源返回 304 狀態碼
400Bad Request填寫表單時,格式不正確導致提交失敗
401Unauthorized訪問需要登錄的頁面時,未登錄或認證 失敗
403Forbidden嘗試訪問你沒有權限查看的頁面
404Not Found訪問不存在的網頁鏈接
500Internal Server Error服務器崩潰或數據庫錯誤導致頁面無法 加載
502Bad Gateway使用代理服務器時,代理服務器無法從 上游服務器獲取有效響應
503Service Unavailable服務器維護或過載,暫時無法處理請求

2.2 HTTP的請求報頭

? Content-Type:數據類型(text/html 等)
? Content-Length:Body 的長度
? Host:客戶端告知服務器, 所請求的資源是在哪個主機的哪個端口上;
? User-Agent:聲明用戶的操作系統和瀏覽器版本信息
? referer:當前頁面是從哪個頁面跳轉過來的
? Location:搭配 3xx 狀態碼使用, 告訴客戶端接下來要去哪里訪問
? Cookie:用于在客戶端存儲少量信息. 通常用于實現會話(session)的功能

3. HTTP協議的版本變遷

版本發布年份核心特性存在問題
HTTP/0.91991僅支持 GET 請求,傳輸純文本無狀態、無首部、功能極簡
HTTP/1.01996引入狀態碼、請求/響應首部、多種方法每次請求重新建立連接
HTTP/1.11997-1999長連接、管道化、緩存機制隊頭阻塞、效率不高
HTTP/22015二進制幀、多路復用、頭部壓縮加密依賴 TLS,復雜度高
HTTP/32022基于 QUIC 協議,0-RTT 建連,減少丟包仍在推廣中,部署成本高
特性HTTP/1.0HTTP/1.1HTTP/2HTTP/3
連接方式短連接長連接多路復用(TCP)多路復用(QUIC/UDP)
并發性能管道化,有限提升真正多路復用多路復用 + 低延遲
編碼方式文本文本二進制幀結構二進制幀結構
頭部壓縮HPACKQPACK
隊頭阻塞嚴重存在應用層阻塞(TCP 造成)無(QUIC 層完全避免)
安全機制支持 TLS默認需 TLS內置加密(QUIC 原生支持)

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

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

相關文章

磁懸浮軸承的“生死線”:磁軸承氣隙與保護軸承氣隙的可靠性設計

在高速旋轉機械的尖端領域,磁懸浮軸承(AMB)憑借無摩擦、超高轉速、免潤滑等優勢傲視群雄。然而,其核心參數——氣隙的設置,尤其是額定工作氣隙與保護軸承(輔助軸承)氣隙之間的大小關系與具體數值…

QT 學習筆記摘要(一)

第一節 QT介紹 1. QT概述 簡單來說,QT就是一個跨平臺的客戶端技術,HTML畫網頁一樣,而QT就是畫客戶端的,它不僅可以繪制界面而且可以做單機應用開發,還可以做網絡程序的客戶端界面開發 更專業的說法是:Qt 是…

QCustomPlot 疊加對象(Overlay Items)

QCustomPlot 提供了一系列可以在圖表上疊加顯示的對象(items),這些對象不屬于數據本身,而是用于標注、輔助線等用途。以下是主要疊加對象的詳細說明和使用方法。 1. QCPItemStraightLine (無限直線) 特性: 無限延伸的…

Flink源碼閱讀環境準備全攻略:搭建高效探索的基石

想要深入探索Flink的底層原理,搭建一套完整且適配的源碼閱讀環境是必經之路。這不僅能讓我們更清晰地剖析代碼邏輯,還能在調試過程中精準定位關鍵環節。接下來,結合有道云筆記內容,從開發工具安裝、源碼獲取導入到調試配置&#x…

Dify,FastGPT,RagFlow有啥區別,在智能問答方面有啥區別

Dify、FastGPT、RagFlow都是當前非常流行的低代碼AI應用開發平臺,它們都專注于讓用戶能夠快速構建AI應用,但在設計理念、功能特色和適用場景上有明顯區別。 讓我詳細對比一下這三個平臺: 1. 平臺定位對比 Dify 定位:全棧AI應用…

基站定位接口如何如何用PHP實現調用?

隨著“新基建”戰略的推進,我國移動通信基站數量快速增長。截至2024年底,全國基站總數已達1265萬個,其中5G基站超425萬個,構建起全球規模最大、技術領先的通信網絡。 在這一基礎上,基站查詢API通過整合三大運營商數據…

Day 4:Shell流程控制——從“直線思維“到“智能決策“的進化

目錄 一、if語句:你以為簡單其實暗藏殺機1. 基礎語法(看似簡單卻容易踩坑)2. 安全寫法規范(企業級建議) 二、條件測試的六大門派1. 文件測試(運維最愛)2. 字符串比較(引號是靈魂&…

分布式訓練中的隨機種子策略:深入理解與實踐指南

分布式訓練中的隨機種子策略:深入理解與實踐指南 引言:一個容易被忽視的關鍵細節 在深度學習的分布式訓練中,你是否見過這樣的代碼? torch.manual_seed(process_seed) # PyTorch操作 random.seed(process_seed) # Pyth…

金山辦公發布WPS智慧教育平臺,發力教育AI意義何在?

鈦媒體消息,金山辦公發布面向教育用戶的 WPS 智慧教育平臺,面對著金山辦公的發力,我們該怎么分析呢? 首先,從市場拓展與用戶需求響應角度看,金山辦公此次推出WPS智慧教育平臺,直接瞄準了教育領…

無人機航電系統之語音通信技術篇

無人機航電系統的語音通信技術是確保無人機與地面控制站、其他無人機或相關人員之間實現高效、穩定語音交互的關鍵技術,在軍事偵察、應急救援、物流運輸、航拍測繪等眾多領域發揮著至關重要的作用。 一、技術原理 無人機航電系統的語音通信技術主要基于無線通信原理…

element plus 的樹形控件,如何根據后臺返回的節點key數組,獲取節點key對應的node節點

在使用 Element Plus 的 el-tree 組件時,如果后端返回的節點 key 數組中包含了部分選中的父級節點的 key,可能會導致該父級節點下的所有子節點也被默認選中。這是因為 el-tree 的默認行為是:如果一個父節點被選中,那么其所有子節點…

什么是Sentinel

什么是 Sentinel? 在分布式系統中,服務間的依賴關系錯綜復雜。一個服務的故障,很可能像多米諾骨牌一樣,迅速蔓延并導致整個系統崩潰,這就是我們常說的“雪崩效應”。為了避免這種災難性后果,我們需要一種強大的機制來保護我們的系統,而 Sentinel 正是為此而生。 Senti…

AWS 使用圖形化界面創建 EKS 集群(零基礎教程)

無需命令行!通過 AWS 控制臺圖形化操作,輕松創建 Kubernetes 集群。 文章目錄 文章簡介 一、準備工作:登錄 AWS 控制臺 二、創建 EKS 集群(控制面) 1. 創建 EKS 集群 2. 設置集群基本信息 3. 配置網絡設置 三、添加…

[C#] Winform - 進程間通信(SendMessage篇)

一、發送端 // 窗體:發送端 public partial class SendForm : Form {public SendForm(){InitializeComponent();}// 按鈕:發送private void btnSend_Click(object sender, System.EventArgs e){IntPtr hwnd User32Helper.FindWindow(null, "接收端…

鋰電池保護板測試儀:守護電池安全的幕后保障

在電動汽車、儲能電站和便攜式電子設備中,鋰電池作為核心動力源,其能量密度與安全性始終是行業關注的焦點。鋰電池在過充、過放、短路等異常情況下可能引發起火甚至爆炸,而鋰電池保護板正是解決這一問題的關鍵組件。為確保保護板性能可靠&…

Qemu搭建RISC-V,運行opensbi+u-boot+img

?1.先下載一個Ubuntu鏡像 https://cdimage.ubuntu.com/releases/24.04/release/ 我這里下載的是這個RISC-V的 🌟1.2.解壓鏡像 xz -d ubuntu-24.04.2-preinstalled-server-riscv64.img.xz ?2.準備RISC-V的QEMU 打開qemu官網https://www.qemu.org/&#xff0c…

【實戰手冊】銀河麒麟服務器系統進入單用戶模式修改密碼(root)指南

目錄 前言 一、銀河麒麟單用戶模式簡介 二、進入單用戶模式修改密碼 三、登錄驗證新密碼 結語 前言 在日常服務器運維工作中,忘記root密碼是系統管理員偶爾會遇到的問題。作為國產操作系統的優秀代表,銀河麒麟服務器系統提供了通過單用戶模式重置r…

偏微分方程通解求解2

題目 求下列方程的通解: { u x y = u x u y u ? 1 ; u x y = u x u y ; u x y = u x u y u u 2 + 1 ; \begin{cases} u_{xy} = u_x u_y u^{-1}; \\ u_{xy} = u_x u_y; \\ u_{xy} = \dfrac{u_x u_y u}{u^2 + 1}; \end{cases} ????????uxy?=ux?uy?u?1;uxy?=ux?…

用于算法性能預測的 GNN 框架

大家讀完覺得有幫助記得關注和點贊!!! 抽象。 數值黑盒優化中的自動算法性能預測通常依賴于問題特征,例如探索性景觀分析特征。這些特征通常用作機器學習模型的輸入,并以表格格式表示。然而,這種方法往往忽…

拯救海量數據:PostgreSQL分區表性能優化實戰手冊(附壓測對比)

1 分區表核心原理與生產痛點 物理存儲結構決定性能邊界 PostgreSQL分區表的本質是繼承表路由規則的邏輯封裝。當父表被查詢時,查詢優化器通過CHECK約束快速定位子表,其性能核心取決于: -- 關鍵系統視圖 SELECT relname, relkind, relpages …