關于 HTTP 協議,你了解多少

HTTP協議

FastAPI 是建立在 HTTP 協議之上,所以為了更好的掌握 FastAPI。我們需要先簡單的了解一下 HTTP協議

簡介

HTTP(Hypertext Transfer Protocol)遵循經典的客戶端-服務器模型,客戶端打開連接以發出請求,然后等待直到收到響應。同時也是Web中最基本的協議之一,用于在瀏覽器和服務器之間傳輸超文本和其他資源。

以下是HTTP協議的詳細介紹:

  1. 基于 TCP/IP協議:
    HTTP協議是基于 TCP/IP協議之上的應用層協議

  2. 請求-響應模型:
    HTTP使用請求-響應模型,客戶端發送請求給服務器,服務器處理請求并返回響應給客戶端。換句話說,肯定是客戶端先發送請求,然后服務端接到請求后,再有響應。請求由一個請求行、請求頭部和請求體組成,響應由一個響應行、響應頭部和響應體組成。

  3. 無狀態:
    指HTTP協議本身不會對請求和響應之間的狀態進行持久化。每個HTTP請求都是獨立的,服務器不會保留任何與之前請求相關的狀態信息。
    當客戶端發送一個HTTP請求給服務器時,服務器會根據請求進行處理并返回響應。在這個過程中,服務器并不會記住之前的請求或與之相關的任何狀態。每個請求都是相互獨立的,服務器只會根據當前請求的內容和上下文進行處理。

  4. 請求方法:
    HTTP定義了多種請求方法,常用的包括:

    1. GET:獲取指定資源的表示

    2. POST:在服務器上創建新資源

    3. PUT:更新指定資源的表示

    4. DELETE:刪除指定資源

  5. URL(Uniform Resource Locator):
    URL用于標識和定位互聯網上的資源。它由協議類型(如HTTP)、主機名、端口號、路徑和查詢參數等組成,例如:http://example.com/path?param=value。

  6. 請求頭部:
    請求頭部包含了客戶端向服務器發送的附加信息,例如User-Agent、Accept-Language、Content-Type等。這些頭部信息提供了請求的上下文和要求。

  7. 響應狀態碼:
    HTTP定義了多種狀態碼,用于表示服務器對請求的處理結果。比如:

    1. 200 OK:請求成功

    2. 404 Not Found:請求的資源不存在

    3. 500 Internal Server Error:服務器內部錯誤

  8. 響應頭部:
    響應頭部包含了服務器返回的附加信息,如Content-Type、Content-Length、Cache-Control等。這些頭部信息提供了相應的上下文和屬性。

  9. 請求和響應體:
    請求體用于發送數據給服務器,通常在POST和PUT請求中使用。響應體包含了服務器返回的數據,可以是HTML文檔、JSON數據、圖片等。

  10. Cookie和會話管理:
    HTTP支持使用Cookie來跟蹤和管理會話狀態。服務器可以在響應中設置Cookie,而客戶端會將Cookie保存并在隨后的請求中發送給服務器。

  11. 安全性:
    HTTP本身是無狀態和明文的協議,因此對于敏感信息的傳輸,需要使用HTTPS(HTTP over TLS)來進行加密和身份驗證,以確保通信的安全性。

HTTP協議是Web通信的核心協議之一,它定義了客戶端和服務器之間的請求和響應交互方式。通過遵循HTTP協議,瀏覽器和服務器能夠進行可靠和高效的通信,實現Web應用程序的開發和交互。

請求行、請求體和請求頭

一個HTTP請求由請求行、請求頭部和請求體組成。下面詳細介紹每個部分的內容:

  1. 請求行(Request Line):請求行包含了請求的方法、URL和HTTP協議版本。它的格式如下:

    METHOD URL HTTP_VERSION
    
    1. METHOD是請求的方法,例如GET、POST、PUT等。
    2. URL是請求的目標資源的URL,包括協議、主機名、端口號、路徑和查詢參數等。
    3. HTTP_VERSION是HTTP協議的版本,如HTTP/1.1。
  2. 請求頭部(Request Headers):請求頭部包含了客戶端向服務器發送的附加信息。每個請求頭部都由一個鍵值對組成,格式為Header-Name: Header-Value。一些常見的請求頭部包括:

    1. User-Agent:指定客戶端的用戶代理(通常是瀏覽器),用于服務器識別客戶端的類型和版本。
    2. Accept:指定客戶端能夠接受的響應內容類型。
    3. Content-Type:指定請求體的內容類型。
    4. Authorization:用于身份驗證,包含了認證憑證。
  3. 請求體(Request Body):請求體用于在POST、PUT等請求方法中發送數據給服務器。它包含了請求的有效載荷,可以是表單數據、JSON數據、文件等。請求體的格式和內容類型由Content-Type頭部指定。需要注意 GET 請求沒有請求體,它的參數在請求行里面。
    請求行和請求頭部都是以CRLF(回車換行符)作為分隔符進行分割,最后以一個空行表示頭部結束。如果請求有請求體,則緊跟在空行之后。

以下是一個完整的HTTP請求的例子,包括請求行、請求頭部和請求體:

POST /api/users HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Content-Type: application/json
Content-Length: 52{"username": "john","password": "secretpassword"
}

在這個例子中:
請求行:POST /api/users HTTP/1.1

  • 請求方法為POST,表示希望在服務器上創建新的資源。
  • URL為/api/users,表示目標資源的路徑。
  • HTTP版本為HTTP/1.1。

請求頭部:

  • Host: example.com:指定請求的目標服務器的主機名。
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36:指定客戶端的用戶代理,告訴服務器使用的瀏覽器和操作系統信息。
  • Content-Type: application/json:指定請求體的內容類型為JSON格式。
  • Content-Length: 52:指定請求體的長度,以字節為單位。

請求體:

{"username": "john","password": "secretpassword"
}

請求體是一個JSON格式的數據,在這個例子中包含了用戶名和密碼字段。

總結來說,這個例子展示了一個使用POST方法發送JSON數據的HTTP請求。請求行指定了請求方法、URL和HTTP版本。請求頭部包含了附加的請求信息,如主機名、用戶代理和內容類型。請求體包含了要發送給服務器的數據。

響應行、響應頭部和響應體

HTTP協議中的響應由一個響應行、響應頭部和響應體組成。以下是它們的詳細說明:

  1. 響應行(Response Line):響應行是HTTP響應的第一行,它包含了協議版本、狀態碼和狀態消息。例如,一個典型的響應行可能是這樣的:HTTP/1.1 200 OK。其中,"HTTP/1.1"是協議版本,"200"是狀態碼,"OK"是狀態消息。

  2. 響應頭部(Response Headers):響應頭部包含了關于響應的元信息,如服務器類型、日期、內容類型等。它由多個以冒號分隔的鍵值對組成,每個鍵值對占據一行。例如,以下是一些常見的響應頭部字段:

    1. Content-Type:指定了響應體的MIME類型,例如"text/html"表示HTML文檔。
    2. Content-Length:指定了響應體的長度,以字節為單位。
    3. Server:指定了服務器的類型和版本信息。
    4. Date:指定了響應生成的日期和時間。
  3. 響應體(Response Body):響應體包含了實際的響應數據。它可以是HTML文檔、JSON數據、圖像等等,具體取決于請求所期望的內容類型和服務器的支持。響應體通常位于響應頭部之后的空行之后。

以下是一個完整的HTTP響應的例子,包括響應行、響應頭部和響應體,其中響應體為JSON格式:

HTTP/1.1 200 OK
Date: Tue, 02 Mar 2024 12:00:00 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Content-Type: application/json
Content-Length: 52{"message": "Hello, world!","status": 200
}

在這個例子中:
響應行:HTTP/1.1 200 OK

  • HTTP版本為HTTP/1.1。
  • 狀態碼為200,表示請求成功。
  • 狀態消息為OK,表示請求被成功處理。

響應頭部:

  • Date: Tue, 02 Mar 2024 12:00:00 GMT:指定響應生成的日期和時間。
  • Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips:指定服務器的軟件和版本信息。
  • Content-Type: application/json:指定響應體的內容類型為JSON格式。
  • Content-Length: 52:指定響應體的長度,以字節為單位。

響應體:

{"message": "Hello, world!","status": 200
}

響應體是一個JSON格式的數據,在這個例子中包含了一個消息和狀態字段。

總結來說,這個例子展示了一個使用HTTP/1.1協議的HTTP響應。響應行指定了HTTP版本、狀態碼和狀態消息。響應頭部包含了附加的響應信息,如日期、服務器信息和內容類型。響應體包含了服務器返回的實際數據,可以是JSON、HTML、圖片等不同類型的數據。

擴展

HTTP協議和Socket

HTTP協議和Socket之間存在密切的關系。HTTP協議是一種應用層協議,用于在客戶端和服務器之間傳輸超文本數據(例如網頁、圖片等)。而Socket是一種用于網絡通信的編程接口,提供了在網絡上發送和接收數據的能力。

HTTP協議使用了底層的Socket技術來進行通信。當客戶端發送HTTP請求時,它會創建一個Socket連接到服務器的指定端口,并通過Socket發送請求。服務器在接收到請求后,也通過Socket向客戶端發送HTTP響應。

具體來說,客戶端在與服務器建立連接時,會創建一個客戶端Socket。客戶端Socket會與服務器的IP地址和端口號相關聯,用于在網絡上與服務器進行通信。客戶端通過Socket發送HTTP請求,并接收服務器發送的HTTP響應。

服務器端也會創建一個服務器Socket,用于監聽指定的端口,并等待客戶端的連接請求。當服務器接收到客戶端連接請求后,會為該客戶端創建一個與之關聯的Socket。服務器通過這個Socket與客戶端進行通信,接收客戶端的HTTP請求,并發送HTTP響應。

Socket提供了一種基于TCP/IP協議的可靠的雙向通信方式。HTTP協議利用Socket提供的底層通信能力,在客戶端和服務器之間傳輸HTTP請求和響應數據。Socket隱藏了底層網絡細節,使得開發人員可以更方便地使用HTTP協議進行網絡通信。

總結來說,HTTP協議和Socket密切相關,Socket提供了HTTP協議進行通信所需的底層網絡傳輸能力,使得客戶端和服務器可以通過HTTP協議進行數據交換。

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

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

相關文章

【Go語言】Go語言中的流程控制

Go語言中的流程控制 流程控制主要用于設定計算執行的順序,簡歷程序的邏輯結果,Go語言的流程控制語句與其他語言類似,支持如下幾種流程控制語句: 條件語句:用于條件判斷,對應的關鍵字有if、else和else if&a…

SQL 語句的執行順序

數據庫引擎在執行SQL語句并不是從SELECT開始執行,而是從FROM開始,執行順序如下(關鍵字前面的數字代表SQL執行的順序步驟): ⑧SELECT ⑨DISTINCT ⑩①【Top Num】 【select list】 ①FROM {left_table_name} ③【join_type】 JOIN {righ…

vuecli配置sass

vuecli5如何配置sass sass有很多優勢,可以減少css重復,提高效率等,本人使用了 vuecli5 node -v 查看node版本根據版本安裝node-sass sass-loader 如我的版本“node-sass”: “^4.14.1”,“sass-loader”: “^7.1.0”,node -vv14.15.0&#…

使用 Docker 部署 Fiora 在線聊天室平臺

一、Fiora 介紹 Fiora 簡介 Fiora 是一款開源免費的在線聊天系統。 GitHub:https://github.com/yinxin630/fiora Fiora 功能 注冊賬號并登錄,可以長久保存你的數據加入現有群組或者創建自己的群組,來和大家交流和任意人私聊,并添…

MySQL 主從讀寫分離入門——基本原理以及ProxySQL的簡單使用

一、讀寫分離工作原理 讀寫分離的工作原理:在大型網站業務中,當單臺數據庫無法滿足并發需求時,通過主從同步方式同步數據。設置一臺主服務器負責增、刪、改,多臺從服務器負責查詢,從服務器從主服務器同步數據以保持一…

C語言數據結構——隊列

目錄 0.前言 1.隊列的基本概念 2.隊列的實現 2.1實現方式 2.2具體實現 3.隊列的應用場景 4.一道隊列的算法題(LeetCode225. 用隊列實現棧) 5.結語 (圖像由AI生成) 0.前言 在計算機科學領域,數據結構是組織和…

Linux篇: 進程控制

一、進程創建 1.1 fork函數初識 在Linux中,fork函數是非常重要的函數,它從已存在進程中創建一個新進程。新進程為子進程,而原進程為父進程。 返回值: 在子進程中返回0,父進程中返回子進程的PID,子進程創…

OSI七層模型/TCP四層模型

協議: 協議是雙方共同指定的一組規則,在網絡通信中表示通信雙方傳遞數據和解釋數據的一組規則。 從A上傳文件到服務器B,需要在A和B之間制定一個雙方都認可的規則,這個規則就叫文件傳輸協議,該協議是ftp協議的一個初級版本&#…

LeetCode 刷題 [C++] 第226題.翻轉二叉樹

題目描述 給你一棵二叉樹的根節點 root ,翻轉這棵二叉樹,并返回其根節點。 題目分析 深度優先搜索(DFS)- 遞歸方式 對于二叉樹的鏡像問題,很容易想到的就是使用遞歸來解決,自底向上依次翻轉每一個節點…

2024年騰訊云優惠券領取頁面_代金券使用方法_新老用戶均可

騰訊云代金券領取渠道有哪些?騰訊云官網可以領取、官方媒體賬號可以領取代金券、完成任務可以領取代金券,大家也可以在騰訊云百科蹲守代金券,因為騰訊云代金券領取渠道比較分散,騰訊云百科txybk.com專注匯總優惠代金券領取頁面&am…

『大模型筆記』Sora:探索大型視覺模型的前世今生、技術內核及未來趨勢

Sora:探索大型視覺模型的前世今生、技術內核及未來趨勢 文章目錄 一. 摘要二. 引言楊立昆推薦的關于世界模型的真正含義(或應該是什么)的好文章。原文:Sora: A Review on Background, Technology, Limitations, and Opportunities of Large Vision Models譯文:Sora探索大型…

百度SEO快排原理是什么?如何快速排名方法?

前言:我之前說過我不打算寫這個快速排序。 首先,我從來沒有在自己的網站上操作過所謂的快速排序。 其次,我不能像網上很多人寫的那樣透露百度快速排序的秘密(說實話,你可以透露秘密)。 方法是有了&#xff…

Linux系統運維腳本:編寫bash腳本程序監控服務器的磁盤空間,在磁盤使用率超過閾值時發送警告郵件

目 錄 一、要求 二、解決方案 (一)解決思路 (二)方案 三、腳本程序實現 (一)腳本代碼和解釋 1、腳本代碼 2、代碼解釋 (二)腳本驗證 1、腳本編輯 2、給予執…

使用遞歸求解數組最大值(c++題解)

題目描述 輸入一個整數n(n不大于1000),接下來分別為n個整數,請使用遞歸求取最大值。 輸入格式 第一行:正整數n。 第二行:n個整數。 輸出格式 輸出最大值 樣例 樣例輸入 復制2 1 2樣例輸出 復制2 …

Postman: 前端必備工具還是后端獨享利器

Postman 的使用場景:適用于前端和后端 Postman 是一個流行的 API 測試與開發工具。它被廣泛地應用在前后端開發的過程中,但是很多人對于它的使用場景存在疑惑。那么,到底是前端用還是后端用呢?本文將從多個角度詳細解答這個問題。…

Node.js_基礎知識(CommonJS模塊化)

CommonJS模塊化規范 加載時機: 服務器端: 模塊的加載是運行時同步加載的,node.js實現了模塊化規范瀏覽器端: 模塊需要提前編譯打包處理,需使用Browserify編譯打包,推薦使用ESM 暴露模塊:module.exports、exports導入模…

“а”搭配使用更地道,柯橋外貿俄語培訓

1、а именно 就是說,就是,正是 例: в то время, а именно год назад. 那時, 也就是一年前。 не кто иной, а именно г-н Ван. 不是別人,就是王先生 2、а наоборот …

【嵌入式——QT】QListWidget

QListWidget類提供了一個基于項的列表小部件,QListWidgetItem是列表中的項,該篇文章中涉及到的功能有添加列表項,插入列表項,刪除列表項,清空列表,向上移動列表項,向下移動列表項。 常用API a…

C語言數據結構基礎——雙鏈表專題

前言 書接上回,雙鏈表便是集齊帶頭、雙向、循環等幾乎所有元素的單鏈表PLUS. 1.初始化、創建雙鏈表 typedef int LTDataType; typedef struct LTNode {LTDataType data;struct LTNode* next;struct LTNode* prev; }LTNode; 不同于單鏈表,此時每個節點應…

selenium初始學習--打開新標簽操作

selenium 打開新標簽操作 簡單說一下使用 環境 :python 3.9 selenium 4,18 初始化操作 目的 打開bilibilie網站并搜索視頻(電影) 并點擊觀看 操作 打開應用并搜索網址 from selenium import webdriver import timefrom selenium.webdr…