HTTP 請求方法詳解:GET、POST、PUT、DELETE 等

在 HTTP 協議中,請求方法(也稱為 HTTP 動詞)定義了客戶端希望對指定資源執行的操作類型。這些方法是 HTTP 報文的核心組成部分,決定了請求的目的和行為。

主要 HTTP 請求方法

1. GET

  • 用途獲取資源

  • 特點

    • 只讀操作,不應修改服務器狀態
    • 數據通過 URL 查詢字符串傳遞(?key=value
    • 可被緩存、收藏、保留在瀏覽器歷史中
    • 有長度限制(約 2048 字符)
  • 示例

    GET /products?id=123 HTTP/1.1
    Host: example.com
    
  • 響應狀態碼

    • 200 OK(成功)
    • 404 Not Found(資源不存在)
    • 304 Not Modified(資源未改變)

2. POST

  • 用途創建新資源或提交數據

  • 特點

    • 非冪等操作(多次調用產生不同結果)
    • 數據通過請求體傳輸(支持多種格式)
    • 無長度限制
    • 不可緩存
  • 示例

    POST /users HTTP/1.1
    Host: example.com
    Content-Type: application/json{"name": "John", "email": "john@example.com"}
    
  • 響應狀態碼

    • 201 Created(資源創建成功)
    • 400 Bad Request(請求錯誤)
    • 409 Conflict(資源沖突)

3. PUT

  • 用途更新整個資源(全量替換)

  • 特點

    • 冪等操作(多次調用效果相同)
    • 需要提供資源的完整表示
    • 如果資源不存在,可能創建新資源
  • 示例

    PUT /users/123 HTTP/1.1
    Host: example.com
    Content-Type: application/json{"name": "John Updated", "email": "john.new@example.com"}
    
  • 響應狀態碼

    • 200 OK(更新成功)
    • 204 No Content(更新成功無返回內容)
    • 404 Not Found(資源不存在)

4. DELETE

  • 用途刪除指定資源

  • 特點

    • 冪等操作
    • 通常不需要請求體
  • 示例

    DELETE /users/123 HTTP/1.1
    Host: example.com
    
  • 響應狀態碼

    • 200 OK(刪除成功)
    • 202 Accepted(已接受刪除請求)
    • 204 No Content(刪除成功無返回內容)
    • 404 Not Found(資源不存在)

5. PATCH

  • 用途部分更新資源

  • 特點

    • 非冪等(取決于實現)
    • 只需提供需要修改的字段
  • 示例

    PATCH /users/123 HTTP/1.1
    Host: example.com
    Content-Type: application/json{"email": "john.updated@example.com"}
    
  • 響應狀態碼

    • 200 OK(更新成功)
    • 204 No Content(更新成功無返回內容)

其他重要方法

6. HEAD

  • 用途:獲取資源的元數據(不返回響應體)

  • 特點

    • 與 GET 相同但不返回內容
    • 用于檢查資源是否存在或驗證緩存
  • 示例

    HEAD /document.pdf HTTP/1.1
    Host: example.com
    

7. OPTIONS

  • 用途:獲取資源支持的通信選項

  • 主要應用

    • CORS 預檢請求(跨域資源共享)
  • 示例響應

    HTTP/1.1 204 No Content
    Allow: GET, POST, OPTIONS
    Access-Control-Allow-Methods: GET, POST, PUT
    

8. TRACE

  • 用途:回顯服務器收到的請求(用于診斷)
  • 注意:存在安全風險(XST攻擊),通常禁用

9. CONNECT

  • 用途:建立到目標資源的隧道(用于 HTTPS 代理)

  • 格式

    CONNECT proxy.example.com:443 HTTP/1.1
    Host: proxy.example.com
    

方法特性對比表

方法安全冪等緩存請求體典型狀態碼RESTful 對應操作
GET不可200, 304獲取資源
POST不可201, 400創建資源
PUT不可200, 204全量更新資源
DELETE不可可選200, 204, 404刪除資源
PATCH可能不可200, 204部分更新資源
HEAD不可200獲取元數據
OPTIONS不可可選204獲取選項
TRACE不可不可200診斷
CONNECT不可200建立隧道

關鍵概念解釋

  • 安全方法:不會修改服務器狀態(GET、HEAD、OPTIONS)
  • 冪等方法:多次執行效果相同(GET、PUT、DELETE、HEAD)

RESTful API 設計規范

在 RESTful 架構中,HTTP 方法與資源操作有明確對應關系:

資源: /users+----------+---------------------+-----------------+
| 方法     | URL                 | 操作            |
+----------+---------------------+-----------------+
| GET      | /users              | 獲取用戶列表    |
| POST     | /users              | 創建新用戶      |
| GET      | /users/{id}         | 獲取單個用戶    |
| PUT      | /users/{id}         | 更新整個用戶    |
| PATCH    | /users/{id}         | 部分更新用戶    |
| DELETE   | /users/{id}         | 刪除用戶        |
+----------+---------------------+-----------------+

實際應用場景

1. 創建訂單(POST)

POST /orders HTTP/1.1
Content-Type: application/json{"product_id": 456,"quantity": 2,"payment_method": "credit_card"
}

2. 更新用戶郵箱(PATCH)

PATCH /users/789 HTTP/1.1
Content-Type: application/json{"email": "new.email@example.com"
}

3. 分頁獲取產品(GET)

GET /products?page=2&per_page=20 HTTP/1.1

4. 刪除評論(DELETE)

DELETE /comments/12345 HTTP/1.1
Authorization: Bearer xyz123

安全注意事項

  1. 敏感操作限制

    • 避免使用 GET 執行寫操作(防止 CSRF 攻擊)
    • 關鍵操作(如刪除)應要求二次確認
  2. 冪等性設計

    • 重要操作(如支付)應設計為冪等
    • 使用唯一 ID 防止重復提交
  3. 方法覆蓋攻擊防護

    • 某些框架允許通過 _method 參數覆蓋方法(如 POST _method=DELETE
    • 確保覆蓋方法有與原方法相同的訪問控制

瀏覽器支持情況

方法HTML 表單支持Fetch/XHR 支持
GET??
POST??
PUT??
DELETE??
PATCH??
HEAD??
OPTIONS??

注意:HTML 表單只原生支持 GET 和 POST 方法。其他方法需要通過 JavaScript(Fetch/XHR)實現。

實踐

  1. 方法選擇原則

    創建
    更新
    刪除
    操作類型
    查詢數據?
    GET
    修改數據?
    POST
    全量更新?
    PUT
    PATCH
    DELETE
  2. API 版本控制

    GET /v2/products/123 HTTP/1.1
    
  3. 狀態碼規范

    • 成功:2xx
    • 重定向:3xx
    • 客戶端錯誤:4xx
    • 服務器錯誤:5xx
  4. HATEOAS 應用

    {"id": 123,"name": "Product","_links": {"self": {"href": "/products/123", "method": "GET"},"update": {"href": "/products/123", "method": "PUT"}}
    }
    

理解 HTTP 請求方法的區別和適用場景是設計高質量 API 的基礎。正確使用這些方法可以創建出符合 RESTful 原則、易于理解且安全的 Web 服務。

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

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

相關文章

Android 代碼熱度統計(概述)

1. 前言 代碼熱度統計,在測試中一般也叫做代碼覆蓋率。一般得到代碼覆蓋率后就能了解整體樣本在線上的代碼使用情況,為無用代碼下線提供依據。 做了一下調研,在Android中一般比較常用的是:JaCoCO覆蓋率統計工具,它采…

RAG優化

RAG搭建本地AI知識庫,在使用過程中遇到的三大痛點,以及相應的進階方案。1. RAG知識庫的三大痛點-- 內容理解不足:AI難以全面理解導入資料的內容,比如在向量編碼時候,生硬的截斷等導致分析結果不理想。eg: 知識庫分割器…

Ubuntu 24.04 啟用 root 圖形登錄

關鍵詞:Ubuntu 24.04、root 登錄、GDM、SSH、nano、配置文件一、前言 Ubuntu 默認禁用 root 賬戶 的圖形與 SSH 登錄,這是為了安全。但在某些場景(如測試、救援、自動化腳本)你可能需要 直接用 root 登錄 GNOME 桌面。本文以 Ubun…

Jekyll + Chirpy + GitHub Pages 搭建博客

Chirpy 是適用于技術寫作的簡約、響應迅速且功能豐富的 Jekyll 主題,文檔地址:https://chirpy.cotes.page/ ,Github 地址:jekyll-theme-chirpy 。 1.開始 打開 chirpy-starter 倉庫,點擊按鈕 Use this template -->…

學習 Flutter (一)

學習 Flutter (一) 1. 引言 什么是 Flutter? Flutter 是 Google 開發的一套開源 UI 框架,主要用于構建高性能、高保真、跨平臺的應用程序。使用一套 Dart 編寫的代碼,開發者可以同時構建適用于: Android iOS Web Windows、mac…

Spring Boot 實現圖片防盜鏈:Referer 校驗與 Token 簽名校驗完整指南

Spring Boot 實現圖片防盜鏈教程(Referer 校驗 Token 簽名校驗)本文將詳細講解兩種防盜鏈實現方案,并提供完整代碼示例。方案一:Referer 校驗通過檢查 HTTP 請求頭中的 Referer 字段判斷來源是否合法。實現步驟創建 Referer 攔截…

從 JSON 到 Python 對象:一次通透的序列化與反序列化之旅

目錄 一、為什么要談 JSON 二、最快速上手:兩把鑰匙 dumps 與 loads 三、深入 dumps:參數是魔法棒 四、深入 loads:把風險擋在門外 五、文件級序列化:dump 與 load 六、處理中文與編碼陷阱 七、異常場景與調試技巧 八、實…

Leetcode 3315. 構造最小位運算數組 II

1.題目基本信息 1.1.題目描述 給你一個長度為 n 的質數數組 nums 。你的任務是返回一個長度為 n 的數組 ans ,對于每個下標 i ,以下 條件 均成立: ans[i] OR (ans[i] 1) nums[i] 除此以外,你需要 最小化 結果數組里每一個 a…

黑搜小知識 | DNS域名解析過程是什么樣的?

什么是DNS?DNS( Domain Name System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,它用于TCP/IP網絡,它所提供的服務是用來將主機名和域名轉換為IP地址的工作。舉例來說,如果你要訪問域…

MyBatis 使用教程及插件開發

作者:小凱 沉淀、分享、成長,讓自己和他人都能有所收獲! 本文的宗旨在于通過簡單干凈實踐的方式教會讀者,使用 SpringBoot 配置 MyBatis 并完成對插入、批量插入、修改、查詢以及注解事務和編程事務的使用,通過擴展插件…

Maui勸退:用windows直接真機調試iOS,無須和Mac配對

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的,可以在任何平臺上使用。 源碼指引:github源…

【極客日常】后端任務動態注入執行策略的一種技術實現

近期做項目時遇到一個場景,是需要在后端任務執行時動態注入策略。具體而言,筆者負責的后端服務,可以理解是會在線上服務發布時,對服務風險做實時掃描,那么這個掃描就需要根據當前線上服務發布上下文,匹配對…

8. JVM類裝載的執行過程

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

Linux操作系統之信號:信號的產生

前言:上篇文章我們大致講解了信號的有關概念,為大家引入了信號的知識點。但光知道那些是遠遠不夠的。本篇文章,我將會為大家自己的講解一下信號的產生的五種方式,希望對大家有所幫助。一、鍵盤(硬件)產生信…

pdf拆分

文章目錄 背景目標實現下載 背景 好不容易下載的1000頁行業報告,領導非要按章節拆分成20份!學術論文合集需要按作者拆分投稿,手動分頁到懷疑人生…客戶發來加密合同,要求每5頁生成獨立文檔,格式還不能亂! …

vue3使用mermaid生成圖表,并可編輯

效果圖實際代碼<template><div class"mermaid-container" style"z-index: 99999" ref"wrapperRef"><!-- 控制欄 --><div class"control-bar"><div class"control-bar-flex control-bar-tab-wrap"…

tcp/quic 的滑動窗口

一、滑動窗口 rwnd&#xff1a; 接收端窗口&#xff0c;接收方在每次發送ACK確認報文時&#xff0c;會包含一個 rwnd (Receive Window Size) 字段&#xff0c;指明自己當前剩余的接收緩沖區大小&#xff08;即可用窗口&#xff09;&#xff0c;這里是否是socket的接收緩沖區&am…

JVM監控及診斷工具-命令行篇

18.1. 概述 性能診斷是軟件工程師在日常工作中需要經常面對和解決的問題&#xff0c;在用戶體驗至上的今天&#xff0c;解決好應用的性能問題能帶來非常大的收益。 Java 作為最流行的編程語言之一&#xff0c;其應用性能診斷一直受到業界廣泛關注。可能造成 Java 應用出現性能…

Jenkins 版本升級與插件問題深度復盤:從 2.443 到 2.504.3 及功能恢復全解析

前言&#xff1a;問題溯源與升級必要性 在 Jenkins 持續集成體系中&#xff0c;插件生態是其強大功能的核心驅動力。然而&#xff0c;某次例行維護中&#xff0c;團隊對 Jenkins 2.443 環境的插件進行批量升級后&#xff0c;意外觸發連鎖反應 &#xff1a; SSH Server 插件功能…

Ribbon實戰

一、前置知識 1.1 負載均衡定義 負載均衡指的是將網絡請求通過不同的算法分配到不同的服務器上的技術&#xff0c;從而提升系統的性能。 1.2 負載均衡工具 負載均衡工具可以分分為客戶端負載均衡工具和服務端負載均衡工具&#xff0c;它們的區別如下。 表1-1 負載均衡工具…