【Java web】HTTP 協議詳解

一、什么是 HTTP?—— 互聯網的 "快遞員"

你有沒有想過,當你在瀏覽器輸入www.baidu.com并按下回車時,背后發生了什么?為什么幾秒鐘后就能看到百度首頁?這一切的背后,都離不開一個叫HTTP的 "快遞員" 在默默工作。

HTTP(超文本傳輸協議)?就像現實中的快遞系統:你的瀏覽器是 "寄件人",百度服務器是 "收件人",而 HTTP 就是那個往返于兩者之間的快遞員,負責把你需要的 "貨物"(網頁、圖片、視頻等)安全送達。

超文本指的是不僅能傳輸文字,還能傳輸圖片、音頻、視頻等多種格式的數據,這也是 "超文本" 中 "超" 的含義。

二、HTTP 如何工作?—— 快遞寄送全流程

HTTP 的工作流程和寄快遞驚人地相似,我們用 "網購一本書" 的場景來類比:

1. 建立連接:打電話叫快遞員上門

當你在瀏覽器輸入網址時,瀏覽器會先和服務器建立連接(就像你打電話叫快遞員上門取件)。早期的 HTTP 每次請求都要重新建立連接,效率很低;現在的HTTP/1.1支持 "長連接"(keep-alive),一次連接可以發送多個請求,就像快遞員一次上門取多件快遞。

2. 發送請求:填寫快遞單

瀏覽器向服務器發送請求報文,相當于你填寫快遞單。這份 "快遞單" 包含三部分:

  • 起始行:告訴服務器 "要做什么"(請求方法)、"去哪里取貨"(URL)、"用什么快遞版本"(HTTP 版本)。
    例如:GET /index.html HTTP/1.1(GET 表示 "取貨",/index.html 是貨物地址,HTTP/1.1 是快遞版本)。
  • 請求頭:附加信息,比如 "收件人聯系方式"(User-Agent,告訴服務器你用的是 Chrome 還是 Firefox)、"貨物類型"(Accept,告訴服務器你能接收 HTML、圖片等格式)。
  • 請求體:要發送給服務器的 "貨物"(比如表單數據),GET 請求沒有請求體,POST 請求才有(就像寄大件才需要填寫貨物詳情)。

3. 處理請求:倉庫找貨

服務器收到請求后,會根據 "快遞單" 上的信息找到對應的資源(比如從數據庫查數據、生成動態網頁),這個過程就像倉庫管理員根據訂單找貨。

4. 發送響應:送貨上門

服務器處理完請求后,會返回響應報文,相當于快遞員把貨物送到你手上。響應報文也包含三部分:

  • 起始行:告訴瀏覽器 "送貨結果"(狀態碼)、"快遞版本"。
    例如:HTTP/1.1 200 OK(200 表示 "貨物已送達",OK 是狀態描述)。
  • 響應頭:附加信息,比如 "貨物重量"(Content-Length)、"貨物類型"(Content-Type,告訴瀏覽器這是 HTML 還是圖片)。
  • 響應體:實際的 "貨物"(比如 HTML 代碼、圖片數據),瀏覽器會解析這些內容并顯示成你看到的網頁。

5. 關閉連接:服務結束

請求響應完成后,連接會關閉(除非啟用了長連接),就像快遞員送完貨離開。

三、核心概念:HTTP 的 "快遞規則"

1. 請求方法:快遞的 "業務類型"

HTTP 定義了多種 "請求方法",最常用的有兩種:

方法作用類比場景特點
GET獲取資源去超市買東西(只拿東西不付錢)參數在 URL 里,不安全,長度有限制
POST提交數據寄快遞(把東西交給快遞員)參數在請求體里,相對安全,可傳大量數據

小提醒:不要用 GET 傳遞敏感信息(比如密碼)!因為 URL 會被瀏覽器記錄,就像你把銀行卡密碼寫在快遞單上,很容易被偷看。

2. 狀態碼:快遞的 "送貨結果"

服務器用狀態碼告訴瀏覽器請求處理結果,常見的有:

  • 2xx(成功)
    200 OK:貨物已送達(請求成功)。
    201 Created:新貨物已入庫(資源創建成功,比如注冊新用戶)。

  • 3xx(重定向)
    302 Found:地址變了,去新地址取貨(臨時重定向,比如網頁搬家)。
    304 Not Modified:貨物沒變化,用你手里的(緩存命中,不用重新下載)。

  • 4xx(客戶端錯誤)
    404 Not Found:地址錯誤,找不到貨物(網頁不存在)。
    403 Forbidden:你沒權限拿這個貨物(拒絕訪問)。

  • 5xx(服務器錯誤)
    500 Internal Server Error:倉庫著火了,無法發貨(服務器崩潰)。
    504 Gateway Timeout:快遞中轉站超時(服務器沒及時響應)。

記憶口訣:2 成功、3 重定向、4 你錯、5 我錯。

3. 報文結構:快遞單的 "填寫規范"

我們用一個實際的 GET 請求報文舉例,看看 "快遞單" 長什么樣:

GET /search?q=java HTTP/1.1  // 起始行:方法+URL+版本
Host: www.baidu.com         // 請求頭:服務器地址
User-Agent: Chrome/90.0.4430.93  // 請求頭:瀏覽器信息
Accept: text/html,image/webp  // 請求頭:可接收的格式// 空行(分隔頭部和實體)
// 請求體(GET請求無實體)

響應報文類似:

HTTP/1.1 200 OK  // 起始行:版本+狀態碼+描述
Content-Type: text/html;charset=utf-8  // 響應頭:內容類型和編碼
Content-Length: 1024  // 響應頭:內容長度<!DOCTYPE html>...  // 響應體:HTML代碼

四、HTTPS:給快遞加 "密碼鎖"

HTTP 傳輸的數據是明文的,就像快遞包裹沒封口,中途可能被人拆開偷看甚至掉包(比如黑客竊取你的賬號密碼)。為了解決這個問題,出現了HTTPS(超文本傳輸安全協議)。

HTTPS 相當于給 HTTP 加了一層 "密碼鎖"(SSL/TLS 加密):

  • 加密傳輸:數據在傳輸過程中被加密,只有服務器能解密(就像包裹用密碼鎖鎖上,只有收件人有鑰匙)。
  • 身份驗證:確保你訪問的是真正的服務器(防止釣魚網站,就像快遞員確認收件人身份)。

小知識:HTTPS 默認使用 443 端口,HTTP 默認用 80 端口,在瀏覽器地址欄會顯示 "小鎖" 圖標。

五、動手實踐:用 Chrome 查看 HTTP 請求

想親眼看看 HTTP 請求長什么樣?用 Chrome 瀏覽器的 "開發者工具" 就能實現:

  1. 打開 Chrome,按F12或右鍵 "檢查" 打開開發者工具。
  2. 切換到Network(網絡)面板,勾選 "Preserve log"(保留日志)。
  3. 在地址欄輸入https://www.baidu.com并回車,就能看到所有 HTTP 請求。
  4. 點擊任意請求(比如第一個www.baidu.com),在右側查看 "Headers"(請求頭 / 響應頭)和 "Response"(響應體)。

通過這個工具,你可以直觀看到請求方法、狀態碼、報文內容,幫你理解 HTTP 的工作原理。

六、總結:HTTP 為什么重要?

HTTP 是互聯網的 "交通規則",所有 Web 通信(瀏覽網頁、刷視頻、發消息)都離不開它。理解 HTTP,就像學會了 "互聯網的語言",是學習 Java Web、前端開發的第一步。

下一篇我們將學習Servlet—— 服務器端的 "快遞處理中心",看看服務器如何接收和處理 HTTP 請求。敬請期待!

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

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

相關文章

流式數據服務端怎么傳給前端,前端怎么接收?

01 引言 大模型時代&#xff0c;尤其會話模型為了提高用戶的使用體驗&#xff0c;它不會將所有的數據加載完成一次響應給客戶端&#xff0c;而是通過數據流&#xff0c;一點點的將數據慢慢呈現出來。 正是這種有趣的交互方式一次次將SSE&#xff08;Server Sent Event&#x…

ML307C 4G通信板:工業級DTU固件,多協議支持,智能配置管理

產品概述 ML307C 4G通信板是一款基于中移物聯網ML307C模組的工業級DTU&#xff08;數據傳輸單元&#xff09;產品&#xff0c;專為工業物聯網應用設計。我們的固件支持多種工業協議&#xff0c;具備遠程配置、FOTA升級、數據加密等企業級功能&#xff0c;為您的工業設備提供穩定…

Sublime配置verilog開發環境-具備語法高亮、代碼補全、自定義代碼段及語法檢查等功能,提升FPGA開發效率!

對于在學習FPGA開發之前使用過其他集成開發工具如VS、pycharm、keil或編輯工具如Sublime、VScode、Notepad的朋友&#xff0c;在使用Vivado時可能會像博主一樣感覺自帶編輯器用起來不太舒服&#xff0c;比如不支持語法高亮顯示&#xff0c;不支持代碼自動補全等功能。因次&…

18_基于深度學習的煙霧檢測識別系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

【計算機網絡架構】混合型架構簡介

引言在當今數字化浪潮席卷全球的背景下&#xff0c;網絡技術正以前所未有的速度迅猛發展&#xff0c;各種網絡架構如雨后春筍般涌現。從早期簡單的總線型、星型架構&#xff0c;到后來的環型、樹型架構&#xff0c;再到如今復雜的網狀型、云計算架構等&#xff0c;每一種架構都…

Hexo 雙分支部署指南:從原理到 Netlify 實戰

Hexo 雙分支部署指南&#xff1a;從原理到 Netlify 實戰 在 Hexo 博客部署中&#xff0c;很多人會困惑于hexo d自動部署與 GitHub 手動提交的區別&#xff0c;以及如何通過雙分支結構優雅地部署到 Netlify。本文將清晰拆解兩種部署方式的核心差異&#xff0c;并手把手教你用雙分…

【數據結構】深入理解單鏈表與通訊錄項目實現

文章目錄一、單鏈表的概念及結構1.1 什么是單鏈表&#xff1f;1.2 節點的組成1.3 單鏈表的特點二、單鏈表的實現2.1 類型定義2.2 基礎工具函數1. 鏈表打印函數2. 節點創建函數2.3 單鏈表的核心操作&#xff08;1&#xff09;插入操作1. 尾插&#xff08;SLTPushBack&#xff09…

《Python學習之字典(一):基礎操作與核心用法》

堅持用 清晰易懂的圖解 代碼語言&#xff0c;讓每個知識點變得簡單&#xff01; &#x1f680;呆頭個人主頁詳情 &#x1f331; 呆頭個人Gitee代碼倉庫 &#x1f4cc; 呆頭詳細專欄系列 座右銘&#xff1a; “不患無位&#xff0c;患所以立。” Python學習之字典&#xff08;…

[安洵杯 2019]Attack

BUUCTF在線評測BUUCTF 是一個 CTF 競賽和訓練平臺&#xff0c;為各位 CTF 選手提供真實賽題在線復現等服務。https://buuoj.cn/challenges#[%E5%AE%89%E6%B4%B5%E6%9D%AF%202019]Attack流量分析題&#xff0c;瀏覽的時候發現攻擊者上傳信息頁面&#xff0c; 直接搜索 flag 就…

復合機器人食品分揀生產線:一體化控制系統引領高效柔性新食代

在食品工業高速發展的今天&#xff0c;面對種類繁多、形態各異的原料分揀需求&#xff0c;以及日益嚴格的衛生安全與效率要求&#xff0c;傳統的固定式分揀設備已難以勝任。復合機器人食品分揀生產線憑借其融合移動&#xff08;AMR&#xff09;與操作&#xff08;機械臂&#x…

二十七、動態SQL

動態SQL介紹動態SQL&#xff1a;if與where標簽動態案例-動態更新EmpMapper&#xff08;接口&#xff09;中對應代碼塊 //動態更新員工public void update2(Emp emp);EmpMapper.xml中對應代碼塊 <!-- 動態更新員工--><update id"update2">update emp<s…

AI可行性分析:數據×算法×反饋=成功

3.1 從場景到AI可行性分析:需求拆解為“數據+算法+反饋” 核心公式: AI可行性 = 數據可獲得性 算法適配性 反饋閉環性 (任一要素為0則需求不可行) 一、傳統需求 vs AI需求本質差異 需求文檔對比(電商案例) 維度 傳統需求文檔(購物車功能) AI需求文檔(商品推薦系…

【圖論】分層圖 / 拆點

大多數都是同一個套路&#xff0c;將圖拆開成幾個圖&#xff0c;每一層都對應著一個不同的狀態&#xff0c;比如把到點 i 的狀態拆成經過了 j 次操作所得的 xx 結果&#xff0c;一般數據不會很大 目前遇到的可分為 3 類&#xff1a; ①.給你最多 k 次操作&#xff0c;求 xx 結…

VS Code配置MinGW64編譯MATIO庫

VS Code 使用 MinGW64 編譯 C 代碼并配置 MATIO 庫的完整步驟 1. 安裝 MSYS2 下載 MSYS2 訪問 MSYS2 官網下載安裝包&#xff08;選擇 x86_64 版本&#xff09;默認安裝路徑&#xff1a;C:\msys64 更新 MSYS2 包數據庫 打開 MSYS2 MinGW 64-bit&#xff08;注意不是 MSYS&…

【前端Vue】使用ElementUI實現表單中可選擇可編輯的下拉框

由于項目在vue的開發框架下&#xff0c;因此使用ElementUI組件庫進行實現。我希望可選擇可編輯的下拉框右側有跟下拉框一樣的箭頭&#xff0c;并且在未輸入任何內容時&#xff0c;點擊該框體會出現選擇列表進行填充數據的選擇&#xff0c;點擊選中數據后列表消失&#xff0c;數…

每日五個pyecharts可視化圖表-line:從入門到精通 (4)

歡迎來到pyecharts折線圖系列的第四篇文章&#xff01;在前三篇中&#xff0c;我們已經掌握了多種折線圖類型&#xff0c;包括基本折線圖、平滑折線圖、雨量流量關系圖、多X軸折線圖、堆疊區域圖和階梯圖等。在本文中&#xff0c;我們將繼續探索五種更高級的折線圖類型&#xf…

MySQL中的字符串函數

目錄 一、字符串【分割】函數&#xff1a;SUBSTRING_INDEX() SUBSTRING_INDEX函數 練習題 統計每種性別的人數 提取博客URL中的用戶名 截取出年齡 SQL83 商品id數據清洗統計 SQL250 查找字符串中逗號出現的次數 二、字符串【截取】函數&#xff1a;SUBSTRING() 基本語…

CodeBuddy IDE深度體驗:AI驅動的全棧開發新時代

在人工智能技術迅猛發展的今天&#xff0c;開發者工具正在經歷一場深刻的變革。騰訊推出的CodeBuddy IDE作為全球首個“產設研一體”的AI全棧高級工程師工具&#xff0c;重新定義了開發者的日常工作流程。 從需求分析到設計、編碼、部署&#xff0c;CodeBuddy通過AI能力將傳統…

實現Android圖片手勢縮放功能的完整自定義View方案,結合了多種手勢交互功能

主要功能特點&#xff1a;支持雙指手勢縮放圖片&#xff0c;通過ScaleGestureDetector實現平滑的縮放效果25雙擊圖片可切換初始大小和中等放大比例16使用Matrix進行圖像變換&#xff0c;保持縮放中心點為手勢焦點位置57自動縮放動畫通過Runnable實現漸進式變化1限制最小和最大縮…

uni-app實戰教程 從0到1開發 畫圖軟件 (橡皮擦)

一、本期內容簡述1. 開發內容上一期&#xff0c;我們一起學習了如何進行繪畫&#xff0c;本期我們將學習如何擦除我們所繪畫的內容&#xff0c;也就是“橡皮擦”功能。首先&#xff0c;我們應該明確需求&#xff0c;橡皮擦可以擦除掉我們繪畫的內容。2. 開發需求所以開發需求&a…