前端必備的 HTTP 知識

来源:https://www.cnblogs.com/gopal/archive/2022/08/16/16591202.html
-Advertisement-
Play Games

HTTP 起源 HTTP 是由蒂姆·伯納斯-李(TimBerners—Lee)於1989年在歐洲核子研究組織(CERN)所發起 其中最著名的是 1999 年 6 月公佈的 RFC 2616,定義了 HTTP 協議中現今廣泛使用的一個版本——HTTP 1.1 HTTP 是什麼 全稱:超文本傳輸協議(H ...


HTTP 起源

HTTP 是由蒂姆·伯納斯-李(TimBerners—Lee)於1989年在歐洲核子研究組織(CERN)所發起

其中最著名的是 1999 年 6 月公佈的 RFC 2616,定義了 HTTP 協議中現今廣泛使用的一個版本——HTTP 1.1

HTTP 是什麼

全稱:超文本傳輸協議(HyperText Transfer Protocol

概念:HTTP 是一種能夠獲取像 HTML、圖片等網路資源的通訊協議(protocol)。它是在 web 上進行數據交換的基礎,是一種 client-server 協議

HTTP——網際網路的多媒體信使 ——《HTTP權威指南》。
HTTP 在網際網路的角色:充當一個信使的角色,乾的就是一個跑腿的活,在客戶端和服務端之間傳遞信息,但我們又不能缺少它。HTTP 協議是應用層的協議,是與前端開發最息息相關的協議。平時我們遇到的 HTTP 請求、 HTTP 緩存、Cookies、跨域等其實都跟 HTTP 息息相關

HTTP 的基礎特性

  • 可拓展協議。HTTP 1.0 出現的 HTTP headers 讓協議拓展變得更加的容易。只要服務端和客戶端就 headers 達成語義一致,新功能就可以被輕鬆的加入進來

  • HTTP 是無狀態的、有會話的。在同一個連接中,兩個執行成功的 HTTP 請求之間是沒有關係的。這就帶來了一個問題,用戶沒有辦法在同一個網站中進行連續的交互,比如在一個電商網站里,用戶把某個商品加入到購物車,切換一個頁面後再次添加了商品,這兩次添加商品的請求之間沒有關聯,瀏覽器無法知道用戶最終選擇了哪些商品。而使用 HTTP 的頭部擴展,HTTP Cookies 就可以解決這個問題。把 Cookies 添加到頭部中,創建一個會話讓每次請求都能共用相同的上下文信息,達成相同的狀態。

  • HTTP 與連接。通過 TCP,或者 TLS——加密的 TCP 連接來發送,理論上任何可靠的傳輸協議都可以使用。連接是傳輸層控制的,這從根本上來講不是 HTTP 的範疇。

也就是說,HTTP 依賴於面向連接的 TCP 進行消息傳遞,但連接並不是必須的。只需要它是可靠的,或不丟失消息的(至少返回錯誤)。

HTTP/1.0 預設為每一對 HTTP 請求/響應都打開一個單獨的 TCP 連接。當需要連續發起多個請求時,這種模式比多個請求共用同一個 TCP 鏈接更低效。為此,HTTP 1.1 持久連接的概念,底層 TCP 連接可以通過 connection 頭部實現。但 HTTP 1.1 在連接上也是不完美的,後面我們會提到。

基於 HTTP 的組件系統

HTTP 的組件系統包括客戶端、web 伺服器和代理

image

客戶端:user-agent

瀏覽器,特殊比如是工程師使用的程式,以及 Web 開發人員調試應用程式

Web服務端

Web Server 來服務並提供客戶端所請求的文檔。每一個發送到伺服器的請求,都會被伺服器處理並返回一個消息,也就是 response

代理(Proxies)

在瀏覽器和伺服器之間,有很多電腦和其他設備轉發了 HTTP 消息。它們可能出現在傳輸層、網路層和物理層上,對於 HTTP 應用層而言就是透明的

有如下的一些作用

  • 緩存
  • 過濾(像防病毒掃描、家長控制)
  • 負載均衡
  • 認證(對不同的資源進行許可權控制)
  • 日誌管理

HTTP 報文組成

HTTP 有兩種類型的消息:

  • 請求——由客戶端發送用來觸發一個伺服器上的動作
  • 響應——來自伺服器端的應答

HTTP 消息由採用 ASCII 編碼的多行文本構成的。在 HTTP/1.1 以及更早的版本中,這些消息通過連接公開的發送。在 HTTP2.0 中,消息被分到了多個 HTTP 幀中。通過配置文件(用於代理伺服器或者伺服器),API(用於瀏覽器)或者其他介面提供 HTTP 消息

典型的 HTTP 會話

  • 建立連接
    在客戶端-伺服器協議中,連接是由客戶端發起建立的。在 HTTP 中打開連接意味著在底層傳輸層啟動連接,通常是 TCP。使用 TCP 時,HTTP 伺服器的預設埠號是 80,另外還有 80008080 也很常用

  • 發送客戶端請求

  • 伺服器響應請求

HTTP 請求和響應

HTTP 請求和響應都包括起始行(start line)、請求頭(HTTP Headers)、空行(empty line)以及 body 部分,如下圖所示:

image

  • 起始行。
    請求的起始行:請求方法、請求 PathHTTP 版本號
    響應的起始行:HTTP 版本號、響應狀態碼以及狀態文本描述

下麵詳細說下請求 Path,請求路徑(Path)有以下幾種:

1)一個絕對路徑,末尾跟上一個 ' ? ' 和查詢字元串。這是最常見的形式,稱為 原始形式 (origin form),被 GETPOSTHEADOPTIONS 方法所使用

POST / HTTP/1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0

2)一個完整的 URL。主要在使用 GET 方法連接到代理的時候使用

GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

3)由功能變數名稱和可選埠(以':'為首碼)組成的 URLauthority component,稱為 authority form。僅在使用 CONNECT 建立 HTTP 隧道時才使用

CONNECT developer.mozilla.org:80 HTTP/1.1

4)星號形式 (asterisk form),一個簡單的星號('*'),配合 OPTIONS 方法使用,代表整個伺服器。

OPTIONS * HTTP/1.1
  • Headers 請求頭或者響應頭。詳見下麵的首部。
    不區分大小寫的字元串,緊跟著的冒號 ('

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家小時候在玩玩具時肯定都幻想過這樣的場景:想象著自己手上的玩具能動起來,就像《玩具總動員》里的玩具們一樣有自己的性格,能夠和自己一起玩耍。以前我也一直以為玩具總動員只是童話,讓玩具擁有靈魂,能夠動起來的想法只是幻想。但如今HMS Core 3D建模服務讓這一幻想變成了現實。 原理解釋 使用HMS ...
  • Vue組件的繼承用法 點擊打開視頻講解 vue組件的繼承適用於UI幾乎一樣,只是數據不一樣的情況下,但是這種情況通過統一封裝組件也是能實現的,小功能建議用封裝,大功能建議用組件繼承,因為大功能在結合搜參數的需要多重的判斷,這樣會導致封裝的組件比較繁雜,出現過多的判斷,用繼承可以改寫基類中的方法和數據 ...
  • 2 基本語法 2.1 JavaScript簡介 JavaScript 是一門解釋型語言,其代碼在客戶端中執行前不需經過編譯,而是直接由瀏覽器解釋執行。主要用作客戶端腳本語言,在瀏覽器中執行。但隨著Node.js的問世,JavaScript 也逐漸開始被用來編寫伺服器端程式。 JavaScript 不 ...
  • display , visibility 僅會改變元素顯示,不會改變元素種類。可以配合 js 使用使元素可以動態的顯示隱藏。 可以使用 display 或 visibility 實現html元素的隱藏功能,但是這兩種方式有不一樣的地方。display 中的 none 值隱藏,元素後不會在占據頁面空間 ...
  • 高階組件(HOC) 高階組件(Heigher Order Component)也被稱之為高階函數,容器組件,高階組件是類組件編程中的一種重要代碼邏輯復用技巧。 高階組件的語法 接收一個React組件作為入參,經過修飾,最後返回一個新的React組件,所以這個入參的React組件被稱之為“UI組件”; ...
  • 1 HTML定義 HTML(英文Hyper Text Markup Language的縮寫)中文譯為“超文本標簽語言”,主要是通過HTML標簽對網頁中的文本、圖片、聲音等內容進行描述。 <strong> 加粗字體 </strong> 2 HTML的骨架格式 <HTML> <head> <title> ...
  • 在React中上下文是一種通信方案。 上下文的特點 在組件樹中,是一種自上而下的單向數據流通信方案,數據只能從父組件註入,在子組件中訪問。 組件關係只要滿足“父組件-後代組件”這種關係時,都可以使用上下文通信。 在父組件中provide提供數據,在後代組件中註入並使用,這種通信不具有響應式,有點像v ...
  • 使用three.js(webgl)搭建智慧樓宇、設備檢測、數字孿生、物聯網3D、物業3D監控、物業基礎設施可視化運維、3D定位、三維室內定位、3d建築,3d消防,消防演習模擬,3d庫房,webGL,threejs,3d機房,bim管理系統 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...