計算機網絡 HTTP篇常見面試題總結

HTTP各版本區別

HTTP 1.0

  • 無狀態、無連接:每次請求都需要建立新的 TCP,處理完后立即關閉,導致開銷較大。
  • 隊頭阻塞:每個請求必須按照順序依次處理,前面的請求未完成,后面的請求只能等待,減低了并發效率。
  • 不支持持久連接:每個請求都建立一個新的 TCP 連接,增加了服務器的負擔

HTTP 1.1

  • 持久連接:引入了 Keep - Alive 機制,多個請求可以復用同一個 TCP 連接,介紹了建立連接的開銷。
  • 管道化:允許在同一個 TCP 連接上同時發送多個請求,提高了并發效率。
  • Host 字段:可以在同一個 IP 地址上允許多個虛擬主機。
  • 斷點續傳:支持文件傳輸中斷后從斷點處繼續傳輸。

HTTP 2.0

  • 二進制分幀:將 HTTP 報文分割為更小的二進制,提高了傳輸效率,并支持多路復用。
  • 頭部壓縮:減少了 HTTP 頭部的大小,降低了網絡開銷。
  • 服務器推送:服務器可以主動向客戶端推送資源,減少了客戶端的請求次數。
  • 多路復用:在一個 TCP 連接上可以同時發送多個請求和響應,解決了 HTTP 1.1 的隊頭阻塞問題。

HTTP 3.0

  • 基于 QUIC 協議:使用 UDP 協議,相較于 TCP 的可靠性,QUIC 通過自身實現可靠傳輸,減少了 RTT。
  • 多路復用:在一個 QUIC 連接上可以同時傳輸多個請求和響應,并且支持流優先級。
  • 更快的連接建立:減少了 TCP 的三次握手和 TLS 的握手時間。
  • 更低的延遲:由于 QUIC 協議的特性,HTTP 3.0 具有很低的延遲。

常見HTTP狀態碼

1xx: 信息響應

  • 100 Continue: 服務器已接收請求的初步部分,客戶端應繼續請求。
  • 101 Switching Protocols: 服務器同意切換協議,如從 HTTP 切換到 WebSocket。

2xx: 成功

  • 200 OK: 請求成功,服務器返回所請求的資源或數據。
  • 201 Created: 請求成功并創建了新的資源,常用于 POST 請求。
  • 204 No Content: 請求成功但服務器不返回任何內容,常用于刪除操作。

3xx: 重定向

  • 301 Moved Permanently: 資源已永久移動到新的 URL,客戶端應使用新 URL 訪問。
  • 302 Found: 資源臨時移動到新的 URL,客戶端應繼續使用原來的 URL。
  • 304 Not Modified: 資源未修改,客戶端可以使用緩存版本。

4xx: 客戶端錯誤

  • 400 Bad Request: 請求無效或語法錯誤,服務器無法處理。
  • 401 Unauthorized: 請求需要身份驗證,客戶端未提供有效的憑證。
  • 403 Forbidden: 服務器理解請求但拒絕執行,通常是權限問題。
  • 404 Not Found: 請求的資源在服務器上未找到。

5xx: 服務器錯誤

  • 500 Internal Server Error: 服務器內部錯誤,無法完成請求。
  • 502 Bad Gateway: 服務器作為網關或代理,從上游服務器接收到無效響應。
  • 503 Service Unavailable: 服務器暫時無法處理請求,通常是因為過載或維護。

HTTP請求內容組成

HTTP 請求組成:

  • 請求行(Request Line):包含請求方法(如 GET、POST)、請求的資源路徑(如 /index.html )、以及 HTTP 協議版本(如 HTTP/1.1)。
  • 請求頭(Request Headers):包含各種鍵值對,用于傳遞客戶端環境、請求內容、認證信息等。
  • 空行(Blank Line):用于分隔請求頭和請求體。
  • 請求體(Request Body):通常在 POST、PUT 等方法中存在,包含需要發送到服務器的數據。

請求頭用于傳遞附加信息:

1.?通用頭(General Headers)
  • Cache-Control:控制緩存策略(如?no-cachemax-age=3600
  • Connection:控制連接狀態(如?keep-aliveclose
  • Date:請求時間(如?Wed, 30 May 2025 12:00:00 GMT
2.?請求頭(Request-Specific Headers)
  • Host:目標服務器域名(如?www.example.com
  • User-Agent:客戶端信息(如瀏覽器類型、操作系統)
  • Accept:客戶端可接收的響應格式(如?application/jsontext/html
  • Accept-Language:客戶端語言偏好(如?zh-CN,en-US;q=0.8
  • Accept-Encoding:客戶端支持的壓縮格式(如?gzipdeflate
  • Cookie:存儲的會話信息(如?session_id=123456
  • Authorization:身份驗證信息(如?Bearer token123
3.?實體頭(Entity Headers)
  • Content-Type:請求體的媒體類型(如?application/jsonmultipart/form-data
  • Content-Length:請求體的長度(如?128
  • Content-Encoding:請求體的編碼方式(如?gzip

請求體的類型由?Content-Type?頭決定,常見類型如下:

1.?無請求體(No Body)
  • 適用方法GETHEADDELETEOPTIONS
  • 示例
    GET /api/users HTTP/1.1
    Host: www.example.com
    
2.?表單數據(Form Data)
  • Content-Typeapplication/x-www-form-urlencoded
  • 格式:鍵值對(key1=value1&key2=value2
  • 示例
    POST /login HTTP/1.1
    Host: www.example.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 27username=admin&password=123456
    
3.?多部分表單數據(Multipart Form Data)
  • Content-Typemultipart/form-data; boundary=----WebKitFormBoundary123456
  • 用途:上傳文件或復雜表單
  • 示例
    POST /upload HTTP/1.1
    Host: www.example.com
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary123456------WebKitFormBoundary123456
    Content-Disposition: form-data; name="username"admin
    ------WebKitFormBoundary123456
    Content-Disposition: form-data; name="avatar"; filename="photo.jpg"
    Content-Type: image/jpeg[二進制文件內容]
    ------WebKitFormBoundary123456--
    
4.?JSON 數據
  • Content-Typeapplication/json
  • 格式:JSON 對象
  • 示例
    POST /api/users HTTP/1.1
    Host: www.example.com
    Content-Type: application/json
    Content-Length: 27{"name": "John", "age": 30}
    
5.?XML 數據
  • Content-Typeapplication/xml?或?text/xml
  • 格式:XML 文檔
  • 示例
    POST /api/users HTTP/1.1
    Host: www.example.com
    Content-Type: application/xml
    Content-Length: 81<user><name>John</name><age>30</age>
    </user>
    
6.?原始數據(Raw Data)
  • Content-Typetext/plainapplication/javascript?等
  • 用途:傳輸任意格式文本
  • 示例
    POST /api/script HTTP/1.1
    Host: www.example.com
    Content-Type: text/plain
    Content-Length: 10Hello World

HTTP中GET和POST區別

從 HTTP 的定義來看:

  • GET:用于獲取資源,通常用于請求數據而不改變服務器狀態。
  • POST:用于提交數據到服務器,通常會改變服務器的狀態或產生副作用(如創建或更新資源)。

由于 HTTP 和瀏覽器等規定,它們在應用過程中會出現一些區別:

參數傳遞方式:

  • GET:參數通過 URL 拼接傳遞,暴露在請求 URL 中,具有可見性,長度有限(取決于瀏覽器和服務器)。
  • POST:參數放在請求體中,通常不可見且長度理論上沒有限制,更適合傳遞大量數據(但是注意,POST 也可以在 URL 上放參數!)。

安全性:

  • GET:參數可見,數據容易暴露在瀏覽器歷史記錄、日志和緩存中,不適合傳遞敏感信息。
  • POST:數據放在請求體中,相對安全,但需要 HTTPS 才能保證數據加密傳輸。

冪等性:

  • GET:冪等(重復請求不會改變服務器狀態)。
  • POST:非冪等(多次請求可能導致重復創建資源或執行多次相同操作)。

GET 和 POST 的數據傳輸方式與限制

  • URL 長度限制:GET 請求中的參數通過 URL 傳遞,受 URL 長度限制。不同瀏覽器和服務器對 URL 長度限制不同,一般為 2048 字節左右,因此不適合大數據傳輸。
  • POST 請求體限制:POST 請求的數據放在請求體中,理論上無長度限制,適合傳輸較多的數據。但實際中服務器對請求體長度有配置限制,如 Nginx 默認限制為 1MB,可根據需求調整。

GET 和 POST 的數據安全性差異

  • GET 請求暴露數據:由于 GET 請求的參數出現在 URL 中,可能被瀏覽器緩存、日志記錄或歷史記錄保存,增加了信息泄露的風險,不適合傳輸敏感信息,如用戶名、密碼等。
  • POST 請求相對安全:POST 請求數據位于請求體中,盡管這并不提供加密保護,但比 URL 中傳遞更隱蔽。配合 HTTPS 加密傳輸可進一步確保數據安全。

緩存機制的不同

  • GET 請求可緩存:GET 請求可以被瀏覽器和 CDN 緩存,當請求同一個 URL 時可以直接返回緩存內容,減少服務器負載。適用于不頻繁變動的資源,比如圖片、靜態頁面。
  • POST 請求默認不緩存:大部分瀏覽器和緩存服務器不緩存 POST 請求,主要因為 POST 請求通常會對服務器數據產生影響(如創建、修改數據),需要確保請求每次都傳遞到服務器。

HTTP和HTTPS區別

數據傳輸安全性:

  • HTTP:數據以明文傳輸,容易被竊聽、篡改。
  • HTTPS:通過 SSL/TLS 協議對數據進行加密傳輸,提供數據機密性和完整性保障。

端口號:

  • HTTP:默認使用端口 80。
  • HTTPS:默認使用端口 443。

性能:

  • HTTP:無加密過程,連接建立速度稍快。
  • HTTPS:基于 HTTP 上又加了 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)協議來實現的加密傳輸,加解密過程增加了計算開銷,握手時間較長,但現代硬件和協議優化已使性能差距減小。

SEO 影響:

  • HTTP:搜索引擎一般會降低未加密站點的排名。
  • HTTPS:搜索引擎更傾向于優先展示 HTTPS 網站。

HTTPS握手過程

TLS 握手過程概述

TLS 握手是客戶端與服務器建立安全連接的關鍵步驟,主要目的是:

  1. 驗證雙方身份(通常驗證服務器身份)。
  2. 協商加密算法和密鑰(對稱密鑰和非對稱密鑰)。
  3. 確保通信內容的機密性和完整性。

基于 RSA 算法的 TLS 握手流程

核心流程(簡化版):
  1. 客戶端發起請求(ClientHello)

    • 客戶端發送支持的 TLS 版本、加密算法列表(如 RSA 相關套件)、隨機數(Client Random)等信息。
  2. 服務器響應(ServerHello)

    • 服務器選擇 TLS 版本、加密算法(如 RSA)、隨機數(Server Random),并發送服務器證書(含 RSA 公鑰)。
  3. 客戶端驗證服務器證書

    • 客戶端通過信任的 CA 驗證服務器證書的合法性,提取服務器公鑰。
  4. 客戶端生成預主密鑰(Pre-Master Secret)

    • 客戶端生成一個隨機數作為預主密鑰,用服務器公鑰加密后發送給服務器(RSA 加密過程)。
  5. 服務器解密預主密鑰

    • 服務器用私鑰解密獲取預主密鑰,結合雙方隨機數(Client Random?和?Server Random)生成?主密鑰(Master Secret)
  6. 生成對稱密鑰

    • 客戶端和服務器分別根據主密鑰生成用于加密通信的對稱密鑰(如 AES 密鑰)。
  7. 驗證握手完整性

    • 雙方發送握手結束消息,使用新生成的密鑰對消息進行加密和校驗,確保握手過程未被篡改。

基于 ECDHE 算法的 TLS 握手流程

核心流程(簡化版):
  1. 客戶端發起請求(ClientHello)

    • 類似 RSA 流程,但支持的加密算法包含 ECDHE 相關套件(如 ECDHE-ECDSA-AES256-GCM-SHA384)。
  2. 服務器響應(ServerHello)

    • 選擇 ECDHE 算法,發送服務器證書(含 ECDSA 公鑰或 RSA 公鑰,取決于簽名算法)、橢圓曲線參數、服務器端生成的橢圓曲線私鑰對應的公鑰(Server PubKey)。
  3. 客戶端驗證服務器證書

    • 驗證證書合法性,提取服務器公鑰。
  4. 客戶端生成橢圓曲線密鑰對

    • 客戶端生成臨時橢圓曲線密鑰對(Client PrivKey?和?Client PubKey),發送?Client PubKey?給服務器。
  5. 協商共享密鑰(ECDHE 密鑰交換)

    • 客戶端和服務器分別用對方的公鑰與自己的私鑰計算出?共享秘密(Shared Secret)
      • 客戶端:用?Server PubKey?和?Client PrivKey?計算共享秘密。
      • 服務器:用?Client PubKey?和?Server PrivKey?計算共享秘密。
    • 雙方得到的共享秘密相同,結合隨機數生成?預主密鑰?和?主密鑰
  6. 生成對稱密鑰

    • 與 RSA 流程類似,基于主密鑰生成對稱加密密鑰。
  7. 驗證握手完整性

    • 流程與 RSA 一致。

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

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

相關文章

目標檢測:YOLO 模型詳解

目錄 一、YOLO&#xff08;You Only Look Once&#xff09;模型講解 YOLOv1 YOLOv2 (YOLO9000) YOLOv3 YOLOv4 YOLOv5 YOLOv6 YOLOv7 YOLOv8 YOLOv9 YOLOv10 YOLOv11 YOLOv12 其他變體&#xff1a;PP-YOLO 二、YOLO 模型的 Backbone&#xff1a;Focus 結構 三、…

開源 FcDesigner 表單設計器組件事件詳解

FcDesigner 是一款基于Vue的開源低代碼可視化表單設計器工具&#xff0c;通過數據驅動表單渲染。可以通過拖拽的方式快速創建表單&#xff0c;提高開發者對表單的開發效率&#xff0c;節省開發者的時間。并廣泛應用于在政務系統、OA系統、ERP系統、電商系統、流程管理等領域。 …

關于 smali:2. 從 Java 到 Smali 的映射

一、對照 Java 代碼與 Smali 代碼差異 1.1 方法調用差異&#xff1a;Java vs Smali Java 方法分類&#xff1a; 方法類型Java 示例Smali 指令特點說明靜態方法Utils.print("hi")invoke-static沒有 this 指針實例方法obj.show()invoke-virtual有 this&#xff0c;虛…

2025年05月29日Github流行趨勢

項目名稱&#xff1a;agenticSeek 項目地址url&#xff1a;https://github.com/Fosowl/agenticSeek項目語言&#xff1a;Python歷史star數&#xff1a;11898今日star數&#xff1a;2379項目維護者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

Dubbo高頻面試題

引言 作為分布式服務框架的標桿&#xff0c;Dubbo憑借其高性能RPC通信、靈活的服務治理能力和豐富的容錯機制&#xff0c;成為Java技術棧中微服務領域的核心考點。本文系統梳理Dubbo高頻面試核心知識點&#xff0c;涵蓋容錯策略、負載均衡、注冊中心原理、服務上下線感知等關鍵…

氮氣吹掃電磁閥

一、氮氣吹掃電磁閥的概述 氮氣吹掃電磁閥是一種重要的工業自動控制設備&#xff0c;用于對工業設備中出現的雜質和沉淀物進行清理&#xff0c;以保證生產線的暢通和生產效率的穩定。其作用是在需要吹掃清洗的工業設備中&#xff0c;通過控制氣源的氣壓&#xff0c;打開電磁閥…

網絡安全的守護者:iVX 如何構建全方位防護體系

一、安全技術的三大趨勢 在數字化時代&#xff0c;網絡安全面臨著前所未有的挑戰。隨著企業級應用的普及&#xff0c;安全技術也在不斷演進。目前&#xff0c;安全技術架構的發展呈現出三大趨勢&#xff1a; 零信任架構的崛起&#xff1a;傳統的網絡安全依賴于邊界防護&#…

微軟云如何申請使用

微軟云&#xff08;Azure&#xff09;新手“開荒”指南&#xff1a;5步搞定賬戶&#xff0c;直達云端&#xff01; 還在為云計算的復雜門檻發愁嗎&#xff1f;別擔心&#xff01;當全球83%的企業都在加速“上云”&#xff0c;微軟智能云Azure憑借其在全球34個區域、200服務的龐…

magic-api配置Git插件教程

一、配置gitee.com 1&#xff0c;生成rsa密鑰&#xff0c;在你的電腦右鍵使用管理員身份運行&#xff08;命令提示符&#xff09;&#xff0c;執行下面命令 ssh-keygen -t rsa -b 2048 -m PEM一直按回車鍵&#xff0c;不需要輸入內容 找到 你電腦中的~/.ssh/id_rsa.pub 文件…

ojs導入顯示空白頁錯誤信息

ojs技術支持:ojs.net.cn error: Uncaught Error: Call to a member function getData() on null in /var/www/html/ojs3/classes/search/ArticleSearchIndex.inc.php:38 Stack trace: #0 /var/www/html/ojs3/plugins/importexport/esci/filter/esciXmlArticleFilter.inc.php(…

【ConvLSTM第一期】ConvLSTM原理

目錄 &#x1f9e0; 一、ConvLSTM 原理詳解1.1 背景1.2 ConvLSTM 的結構 參考 ConvLSTM&#xff08;Convolutional Long Short-Term Memory&#xff09;是一種結合了卷積神經網絡&#xff08;CNN&#xff09;與循環神經網絡&#xff08;RNN&#xff09;中 LSTM&#xff08;長短…

4.8.1 利用Spark SQL實現詞頻統計

在利用Spark SQL實現詞頻統計的實戰中&#xff0c;首先需要準備單詞文件并上傳至HDFS。接著&#xff0c;可以通過交互式方法或創建Spark項目來實現詞頻統計。交互式方法包括讀取文本文件生成數據集&#xff0c;扁平化映射得到新數據集&#xff0c;然后將數據集轉成數據幀&#…

Linux相關概念和易錯知識點(41)(UDP、TCP報頭結構)

目錄 1.UDP&#xff08;1&#xff09;傳輸層&#xff08;2&#xff09;UDP報頭&#xff08;3&#xff09;緩沖區和sk_buff①緩沖區②sk_buff 2.TCP&#xff08;1&#xff09;發送和接受緩沖區&#xff08;2&#xff09;報頭結構①按序到達②可靠傳輸③流量控制④緊急指針 1.UDP…

光譜相機在生態修復監測中的應用

光譜相機通過多維光譜數據采集與智能分析技術&#xff0c;在生態修復監測中構建起?“感知-評估-驗證”?的全周期管理體系&#xff0c;其核心應用方向如下&#xff1a; 一、土壤修復效能量化評估 ?重金屬污染動態監測? 通過短波紅外&#xff08;1000-2500nm&#xff09;波…

[網頁五子棋]項目介紹以及websocket的消息推送(輪詢操作)、報文格式和握手過程(建立連接過程)

文章目錄 項目背景核心技術創建項目WebSocket消息推送輪詢操作 報文格式握手過程(建立連接過程) 項目背景 用戶模塊 用戶的注冊和登錄管理用戶的天梯分數&#xff0c;比賽場數&#xff0c;獲勝場數等信息 匹配模塊 依據用戶的天梯積分&#xff0c;來實現匹配機制 對戰模塊 把兩…

時序模型介紹

一.整體介紹 1.單變量 vs 多變量時序數據 單變量就是只根據時間預測&#xff0c;多變量還要考慮用戶 2.為什么不能用機器學習預測&#xff1a; a.時間不是影響標簽的關鍵因素 b.時間與標簽之間的聯系過于弱/過于復雜&#xff0c;因此時序模型依賴于時間與時間的相關性來進行預…

尚硅谷redis7 86 redis集群分片之3主3從集群搭建

86 redis集群分片之3主集群搭建 3主3從redis集群配置 找3臺真實虛擬機,各自新建 m?dir -p /myredis/cluster 新建6個獨立的redis實例服務 IP:192.168.111.175端口6381/端口6382 vim /myredis/cluster/redisCluster6381.conf bind 0.0.0.0 daemonize yes protected-mode no …

Python服務器請求轉發服務

前言&#xff1a; 服務器無法連接外網 配置步驟 準備python腳本服務器內下載python 示例 1.下載python創建虛擬環境以及配置 -- 磁盤空間 df -h -- 下載apt sudo yum install apt -y-- 下載python pip sudo apt install python3 python3-pip python3-venv -y-- 測試查看 …

02.K8S核心概念

服務的分類 有狀態服務&#xff1a;會對本地環境產生依賴&#xff0c;例如需要把數據存儲到本地磁盤&#xff0c;如mysql、redis&#xff1b; 無狀態服務&#xff1a;不會對本地環境產生任何依賴&#xff0c;例如不會存儲數據到本地磁盤&#xff0c;如nginx、apache&#xff…

Java八股-Java優缺點,跨平臺,jdk、jre、jvm關系,解釋和編譯

java優勢劣勢&#xff1f; 優勢&#xff1a;面向對象&#xff0c;平臺無關&#xff0c;垃圾回收&#xff0c;強大的生態系統 劣勢&#xff1a;運行速度慢&#xff08;相比于c和rust這樣的原生編譯語言會比較慢&#xff09;&#xff0c;語法繁瑣&#xff08;相比于python&…