【HTTP三個基礎問題】

面試官您好!HTTP是超文本傳輸協議,是互聯網上客戶端和服務器之間傳輸超文本數據(比如文字、圖片、音頻、視頻等)的核心協議,當前互聯網應用最廣泛的版本是HTTP1.1,它基于經典的C/S模型,也就是客戶端-服務器模型,一次完整的HTTP通信包含客戶端發起請求到服務器響應的全過程。

首先來看客戶端發起的HTTP請求報文。請求報文由客戶端(比如瀏覽器、App)向服務器發起,主要由四個部分構成:請求行、請求頭、空行和請求體。

第一部分是請求行,主要功能是說明客戶端對服務器資源執行的操作。它由方法(Method)、資源路徑(Resource Path)、HTTP版本三個部分構成,每部分用空格隔開。

  • 請求方法定義操作類型,比如常見的GET用于獲取資源(像瀏覽器訪問網頁),POST用于提交數據(如登錄時發送賬號密碼)。
  • **URI(統一資源標識符)**即資源路徑,標識請求針對的資源,例如/api/user指向用戶數據接口。
  • HTTP版本常見的有1.1、2.0等,例如HTTP/1.1表示使用該版本的通信規則。

第二部分是請求頭,由多行key:value鍵值對組成,每行以回車換行(\r\n)符號分割,類似快遞單上的額外備注信息,傳遞請求的附加信息。常見字段包括:

  • User-Agent:告訴服務器客戶端類型(如Chrome瀏覽器或手機App),方便服務器返回適配內容。
  • Content-Type:說明請求體的數據格式,比如application/json表示請求體是JSON數據。
  • Host:請求的服務器域名,用于區分同一IP下的不同站點。
  • Accept:客戶端能處理的媒體類型,如text/html表示可接收網頁內容。
  • Accept-Encoding:客戶端支持的內容編碼,如gzip表示可接收壓縮數據。
  • Authorization:用于身份驗證的憑證(如登錄令牌),服務器通過它識別用戶權限。
  • Cookie:客戶端存儲的會話信息(如登錄態),服務器通過它維持用戶會話。
    每行\r\n的作用像表格換行,確保每個鍵值對獨立清晰。

第三部分是空行,僅有一個\r\n,是請求頭部和請求正文的分隔符,明確劃分不同區域的界限。

第四部分是請求正文,存放客戶端提交的數據,格式靈活,可以是普通字符串、JSON、XML等。例如登錄時提交的賬號密碼(JSON格式)、上傳文件的二進制數據,都通過請求正文傳遞給服務器,GET請求通常沒有請求體。

服務器收到請求后,會返回響應報文,響應報文同樣包含四個部分:

第一部分是狀態行,格式為協議版本+狀態碼+狀態短語,例如HTTP/1.1 200 OK

  • 狀態碼是核心反饋結果:2xx表示成功(如200 OK),3xx表示重定向(如302 Found),4xx表示客戶端錯誤(如404 Not Found資源不存在),5xx表示服務器錯誤(如500 Internal Server Error)。

第二部分是響應頭,也是多行key:value鍵值對,傳遞結果附加信息。例如:

  • Content-Type:響應體的數據類型(如application/json表示接口返回JSON數據)。
  • Cache-Control:緩存策略(如max-age=3600表示客戶端可緩存響應1小時)。
  • Set-Cookie:服務器給客戶端設置的Cookie(如登錄態),用于維持會話。
  • Access-Control-Allow-Origin:跨域資源共享策略(如*表示允許所有域名跨域訪問)。

第三部分是空行,同樣用\r\n分隔響應頭和響應體。

第四部分是響應體,是服務器返回的核心數據,可能是HTML頁面代碼、JSON接口結果、圖片/視頻二進制數據等。例如訪問網頁時,響應體包含HTML代碼,瀏覽器解析后渲染頁面。

二、HTTP有哪些請求方式?

面試官您好!HTTP請求方式是客戶端對服務器資源的操作指令,不同方法對應不同語義,可按功能分為三類,同時涉及安全性和冪等性概念。

先明確兩個核心概念

  • 安全性:是否會修改服務器資源狀態(“讀操作”安全,“寫操作”不安全)。
  • 冪等性:多次執行同一請求,服務器資源狀態是否一致(冪等方法結果不變,非冪等可能改變)。
(一)讀操作(安全、冪等)
  1. GET

    • 用途:獲取資源(查數據),如瀏覽器訪問網頁GET https://www.example.com或API查列表GET /api/articles
    • 特點:參數拼在URL(如?id=123),可緩存、易分享,但敏感數據易暴露(如密碼不能用GET傳遞)。
    • 安全/冪等:安全(僅讀取)、冪等(多次請求結果一致)。
  2. HEAD

    • 用途:僅獲取響應頭(不返回正文),用于檢查資源元數據(如HEAD /file.zip查看文件是否存在、大小)。
    • 特點:輕量高效,常做“預檢”(如下載大文件前確認信息)。
    • 安全/冪等:安全(僅讀頭)、冪等(多次請求頭信息不變)。
(二)寫操作(非安全,部分冪等)
  1. POST

    • 用途:提交數據創建資源(寫操作),如登錄表單POST /api/login、上傳文件。
    • 特點:數據放請求體(相對隱蔽),但非冪等(多次提交可能創建多條數據,如重復下單)。
    • 安全/冪等:非安全(修改狀態)、非冪等。
  2. PUT

    • 用途:全量更新資源(替換數據),如修改用戶資料PUT /api/user/123(需傳完整信息)。
    • 特點:冪等(多次用相同數據更新,結果一致)。
    • 安全/冪等:非安全(修改狀態)、冪等。
  3. PATCH

    • 用途:局部更新資源(修改部分字段),如改用戶昵稱PATCH /api/user/123(僅傳{"nickname":"new"})。
    • 特點:靈活高效,但非冪等(多次調用持續修改,如多次“積分+10”)。
    • 安全/冪等:非安全、非冪等。
  4. DELETE

    • 用途:刪除資源,如刪訂單DELETE /api/order/123
    • 特點:冪等(多次刪除結果一致,資源已刪除)。
    • 安全/冪等:非安全、冪等。
(三)控制操作(安全、冪等)
  1. OPTIONS
    • 用途:查詢服務器支持的方法,常用于跨域預檢(如前端發POST前,瀏覽器自動發OPTIONS詢問權限)。
    • 特點:無實際業務邏輯,僅協商規則。
    • 安全/冪等:安全(不修改狀態)、冪等。

實際場景選擇:遵循RESTful規范,查數據用GET,創建用POST,全量更新用PUT,局部更新用PATCH,刪除用DELETE。例如電商系統中,查商品用GET,下單用POST,改地址用PUT,刪訂單用DELETE,語義清晰且符合規范。

三、GET請求和POST請求的區別

面試官您好!GET和POST是最常用的HTTP方法,核心區別體現在用途、數據傳遞、安全、冪等性等方面,結合場景選擇能避免設計誤區。

(一)五大核心差異
維度GETPOST
核心用途讀資源(查數據,如查商品詳情)寫資源(提交數據,如下單、登錄)
數據位置拼在URL(如?keyword=手機放請求體(如JSON格式的賬號密碼)
安全性低(參數暴露在URL,易被記錄)中(數據在體內,但HTTP不加密)
冪等性冪等(多次請求結果一致)非冪等(多次提交可能重復創建)
緩存支持可緩存(瀏覽器自動存URL響應)默認不緩存(需顯式設置)
(二)逐場景解析
  1. 用途與數據傳遞

    • GET適合讀操作,如瀏覽網頁GET https://example.com/article/123,參數在URL清晰可見,適合公開場景(如搜索關鍵詞)。
    • POST適合寫操作,如登錄POST /api/login,賬號密碼放請求體,避免暴露在URL(但需配合HTTPS加密才安全)。
  2. 安全性對比

    • GET的URL參數會被瀏覽器歷史、服務器日志記錄,公共網絡下傳敏感數據(如密碼)風險極高。
    • POST的數據在請求體,抓包工具雖能截取,但配合HTTPS加密(TLS層)可保障安全(如電商支付場景必須用POST+HTTPS)。
  3. 冪等性與緩存

    • GET冪等,多次刷新商品詳情頁不會改變服務器數據;POST非冪等,重復提交訂單會生成多個記錄。
    • GET響應可被瀏覽器緩存,提升性能(如新聞列表頁);POST默認不緩存,因寫操作結果可能每次不同。
(三)典型場景選擇
  • 選GET:查公開數據(如商品搜索)、需緩存的頁面(如靜態資源)、支持書簽分享的場景(如文章鏈接)。
  • 選POST:提交敏感數據(如登錄、支付)、傳大量數據(如上傳文件)、改變服務器狀態的操作(如發布評論)。

反例提醒:避免用GET傳密碼(URL暴露風險),也不建議用POST做查詢(違背語義,團隊協作易困惑)。遵循HTTP方法的設計初衷,能讓接口更健壯、易維護。

總結

HTTP報文結構是通信的“骨架”,請求方法是操作的“靈魂”,GET/POST的差異則是實際開發的“指南針”。理解這些細節,不僅能應對面試,更能在實際項目中設計出高效、安全的接口,例如通過請求頭緩存控制提升性能,或用HTTPS+POST保障敏感數據傳輸。

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

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

相關文章

NLP中的input_ids是什么?

在自然語言處理(NLP)中,input_ids 是什么 在自然語言處理(NLP)中,input_ids 是將文本轉換為模型可處理的數字表示后的結果,是模型輸入的核心參數之一。 一、基本概念 文本數字化 原始文本(如 “Hello world!”)無法直接被模型處理,需要通過分詞器(Tokenizer) 將其…

?? Linux Docker 基本命令參數詳解

🐳 Linux Docker 基本命令參數詳解 📘 1. Docker 簡介 Docker 是一個開源的容器化平臺,它通過將應用及其依賴打包到一個輕量級、可移植的容器中,從而實現跨平臺運行。Docker 采用 C/S 架構,服務端稱為 Docker Daemon&a…

Spring IoC 模塊設計文檔

注:碼友們,我們是從設計的角度一步步學習和分解Spring;所以不要一上來就想看源碼,也不需要關心Spring具體加載進去的;我們只封裝工具(如IoC),至于調用,暫時不用考慮&…

Linux(生產消費者模型/線程池)

目錄 一 生產消費者模型 1. 概念: 2. 基于阻塞隊列的生產消費者模型: 1. 對鎖封裝 2. 對條件變量封裝 二 信號量(posix) 1. 概念 2. API 3. 基于環形隊列的生產消費者模型 三 線程池 1. 概念 2. 示例 四 補充字段 1. 可重入函數 VS 線程安…

無線網絡掃描與分析工具 LizardSystems Wi-Fi Scanner 25.05

—————【下 載 地 址】——————— 【?本章下載一】:https://pan.xunlei.com/s/VOS4QQ9APt3FgFQcxyArBiZlA1?pwdi4du# 【?本章下載二】:https://pan.xunlei.com/s/VOS4QQ9APt3FgFQcxyArBiZlA1?pwdi4du# 【百款黑科技】:https://uc…

Java Map完全指南:從基礎到高級應用

文章目錄 1. Map接口概述Map的基本特性 2. Map接口的核心方法基本操作方法批量操作方法 3. 主要實現類詳解3.1 HashMap3.2 LinkedHashMap3.3 TreeMap3.4 ConcurrentHashMap 4. 高級特性和方法4.1 JDK 1.8新增方法4.2 Stream API結合使用 5. 性能比較和選擇建議性能對比表選擇建…

[最全總結]城市災害應急管理系統

城市災害應急管理集成系統 | 國家重點研發政府間合作項目 Vue+ElementUI+Bpmn+Cesium+Java SpringBoot 項目描述 在智慧城市戰略背景下,項目面向內澇、團霧和火災等災害,開發了集災害模型集成模擬、場景可視化與應急預案管理于一體的系統,系統各子模塊進行軟件功能測試,測…

QtWidgets模塊功能及架構解析

QtWidgets 是 Qt 框架中用于創建傳統桌面應用程序圖形用戶界面(GUI)的核心模塊。在 Qt 6.0 中,QtWidgets 模塊繼續提供豐富的 UI 組件和功能,盡管 Qt 正在向 QML 方向演進,但 QtWidgets 仍然是許多桌面應用程序的基礎。 一、主要功能 基礎窗…

grep、wc 與管道符快速上手指南

🎯 Linux grep、wc 與管道符快速上手指南:從入門到實用 📅 更新時間:2025年6月7日 🏷? 標簽:Linux | grep | wc | 管道符 | 命令行 文章目錄 前言🌟 一、grep、wc 和管道符簡介1.核心功能2.核心…

C++11 右值引用:從入門到精通

文章目錄 一、引言二、左值和右值(一)概念(二)區別和判斷方法 三、左值引用和右值引用(一)左值引用(二)右值引用 四、移動語義(一)概念和必要性(二…

java復習 04

心情復雜呢,現在是6.7高考第一天,那年今日此時此刻我還在考場掙扎數學,雖然結果的確很糟糕,,現在我有點對自己生氣明明很多事情待辦確無所事事沒有目標,不要忘記曾經的自己是什么樣子的,去年今日…

從零開始搭建 Pytest 測試框架(Python 3.8 + PyCharm 版)

概述 在軟件開發中,自動化測試是確保代碼質量的重要方式。而 Pytest 是一個功能強大且易于上手的 Python 測試框架,非常適合初學者入門。 本文將帶你一步步完成: 安裝和配置 Pytest在 PyCharm 中搭建一個清晰的測試項目結構 準備工作 在…

用電腦通過網口控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮點: 體驗 200 MHz 至 1 GHz 的帶寬和 4 個模擬通道。與 12 位 ADC 相比,使用 14 位模數轉換器 (ADC) 將垂直分辨率提高四倍。使用 10.1 英寸電容式觸摸屏輕松查看和分析您的信號。捕獲 50 μVRMS 本底噪聲的較小信號。使用獨有區域觸摸在幾秒…

Java Smart 系統題庫試卷管理模塊設計:從需求到開發的實戰指南

在教育信息化不斷推進的背景下,高效的題庫及試卷管理系統至關重要。Java Smart 系統中的題庫及試卷管理模塊,旨在為教師提供便捷的試題錄入、試卷生成與管理功能,同時方便學生在線練習與考試。本文將詳細介紹該模塊的設計思路與核心代碼實現。…

PDF圖片和表格等信息提取開源項目

文章目錄 綜合性工具專門的表格提取工具經典工具 綜合性工具 PDF-Extract-Kit - opendatalab開發的綜合工具包,包含布局檢測、公式檢測、公式識別和OCR功能 倉庫:opendatalab/PDF-Extract-Kit特點:功能全面,包含表格內容提取的S…

git小烏龜不顯示圖標狀態解決方案

第一步 在開始菜單的搜索處,輸入regedit命令,打開注冊表。 第二步 在注冊表編輯器中,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 這一項。 第三步 讓Tortoise相關的項目排在前…

Windows平臺RTSP/RTMP播放器C#接入詳解

大牛直播SDK在Windows平臺下的RTSP、RTMP播放器模塊,基于自研高性能內核,具備極高的穩定性與行業領先的超低延遲表現。相比傳統基于FFmpeg或VLC的播放器實現,SmartPlayer不僅支持RTSP TCP/UDP自動切換、401鑒權、斷網重連等網絡復雜場景自適應…

題海拾貝:P1091 [NOIP 2004 提高組] 合唱隊形

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C修煉之路》 歡迎點贊&#xff0c;關注&am…

Python控制臺輸出彩色字體指南

在Python開發中&#xff0c;有時我們需要在控制臺輸出彩色文本以提高可讀性或創建更友好的用戶界面。本文將介紹如何使用colorama庫來實現這一功能。 為什么需要彩色輸出&#xff1f; 提高可讀性&#xff1a;重要信息可以用不同顏色突出顯示更好的用戶體驗&#xff1a;錯誤信息…

chili3d 筆記17 c++ 編譯hlr 帶隱藏線工程圖

這個要注冊不然emscripten編譯不起來 --------------- 行不通 ---------------- 結構體 using LineSegment std::pair<gp_Pnt, gp_Pnt>;using LineSegmentList std::vector<LineSegment>; EMSCRIPTEN_BINDINGS(Shape_Projection) {value_object<LineSegment&g…