精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

冪等和非冪等請求的一些定義和分析

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-17 10:50 ? 次閱讀

最近在做項目的過程中,有一個需求是在客戶端 HTTP 請求失敗后,增加一個重試機制,然后我就翻了一些有關“重試”的庫,找到一個 axios-retry,在了解的過程中,我就發現了里面有一個默認的配置選項:

“By default, it retries if it is a network error or a 5xx error on an idempotent request (GET, HEAD, OPTIONS, PUT or DELETE).

什么意思呢?默認情況下,只有當出現網絡問題,是“冪等請求”的 5xx 狀態碼的情況下,才會發起重試,而這里面并不包含 POST 請求。

我就好奇了,這里面的這個 idempotent request,也就是“冪等請求”究竟是什么意思呢?

帶著好奇我就搜索了下,學到了新的知識,這里就跟大家分享下。

冪等請求

冪等請求,英文叫做 Idempotent Request,官方的文檔是這個:https://developer.mozilla.org/en-US/docs/Glossary/Idempotent

官方定義如下:

“An HTTP method is idempotent if the intended effect on the server of making a single request is the same as the effect of making several identical requests.

意思就是,如果發出單個請求對服務器的預期效果與發出多個相同請求的效果相同,則HTTP 方法是冪等的。

其實說白了意思就是這個請求發起一次和發起多次,都對服務器結果沒什么區別,一次請求后,服務器結果由 A 變成了 B,后面再發多次這樣的請求,結果還是 B 不變,那這個請求就是冪等的。

冪等請求分類

我們知道,HTTP 請求一共有 GET、POST、PATCH、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT這些,那哪些是冪等,哪些是不冪等的呢。

安全請求

這里面我們先分析下,其中有的請求就是一些壓根不會對服務器產生任何影響的請求,比如說 GET 就是從服務器上讀取信息并返回,服務器的數據根本不會被修改,這種請求就是“安全”的請求。

安全請求有哪些呢?GET、HEAD、OPTIONS、TRACE。

具體對如上三種請求的解釋見官方文檔:

  • GET:https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
  • HEAD:https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD
  • OPTIONS:https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
  • TRACE:https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/TRACE

所以,GET、HEAD、OPTIONS、TRACE 這些請求都是冪等請求。

POST

接下來我們來分析下 POST 請求,這個是冪等的嗎?

不是。

因為 POST 請求一般會用作創建一個字段,比如:

POST /add_row HTTP/1.1
POST /add_row HTTP/1.1   - > Adds a 2nd row
POST /add_row HTTP/1.1   - > Adds a 3rd row

每 POST 一次,一個字段就會被創建,所以請求一次的結果和請求多次的結果是不一樣的。

所以,POST 不是冪等請求。

PUT

那 PUT 是不是呢?

是。

因為 PUT 請求一般會用作修改一個資源,而且是全部覆蓋修改。

所以,發起一次 PUT 請求,服務器資源就被修改為 PUT 請求的內容了,如果再繼續發起多次,那最終結果還是不變。

所以 PUT 請求是冪等請求。

DELETE

同理,DELETE 是不是呢?

是。

因為 DELETE 請求是用作刪除服務器資源的,發起一次 DELETE 請求,資源就被刪除了,在發起多次,結果也是一樣的,因為資源已經被刪除了。

所以 DELETE 請求是冪等請求。

PATCH

既然 PUT 是冪等請求,那么 PATCH 是不是呢?

不是。

PATCH 這個請求可能大家見的不多啊,這個請求其實和 PUT 類似,也是用來修改資源的,但 PUT 偏向于把整個資源進行修改,而 PATCH 是修改資源的某一部分。

具體 PATCH 的介紹大家可以見:https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH

原文有一個對 PATCH 是是否冪等的解釋:

“A PATCH is not necessarily idempotent, although it can be. Contrast this with PUT; which is always idempotent. The word "idempotent" means that any number of repeated, identical requests will leave the resource in the same state. For example if an auto-incrementing counter field is an integral part of the resource, then a PUT will naturally overwrite it (since it overwrites everything), but not necessarily so for PATCH.

所以,在某些情況下,PATCH 不一定是冪等的,比如服務器的某些資源的某個字段是一個自增技術,那么每 PATCH 一次,這個就會改變一次,而 PUT 往往都是全部覆蓋。

所以,在這里,PATCH 不被認為是冪等請求。

CONNECT

這個 CONNECT 大家可能也用的不多啊,CONNECT 請求會被用作啟動與所請求資源的雙向通信,它可以用來打開隧道。

具體大家可以參見:https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT

所以,這個本身就是一種用來啟動雙向通信的請求,是一種逐跳請求,請求一次和多次所建立的一些連接次數也是不一樣的,所以不是冪等請求。

總結

好了,這里就總結了冪等和非冪等請求的一些定義和分析。

冪等請求有:GET, HEAD, PUT, DELETE, OPTIONS, TRACE

非冪等請求有:POST, PATCH, CONNECT

看完這篇文章,以后大家再問起冪等請求相關的問題,肯定就不會懵了吧!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    6892

    瀏覽量

    88827
  • 服務器
    +關注

    關注

    12

    文章

    9021

    瀏覽量

    85183
  • HTTP
    +關注

    關注

    0

    文章

    501

    瀏覽量

    31060
  • 客戶端
    +關注

    關注

    1

    文章

    290

    瀏覽量

    16661
收藏 人收藏

    評論

    相關推薦

    穩態熱暈暈效應的數值分析

    【作者】:孫運強;許曉軍;習鋒杰;陸啟生;吳武明;郭少鋒;【來源】:《強激光與粒子束》2010年02期【摘要】:運用高斯光束展開的方法,分析圓對稱平頂光束在大氣傳輸中的熱暈及其暈效應。通過對熱暈
    發表于 04-22 11:37

    離線計算中的和DataWorks中的相關事項

    多次的結果和執行次是完全樣的。嚴格的定義這里不展開討論,有興趣的可以到網上搜下,會有很多介紹。通俗一些說,
    發表于 02-27 13:24

    請問DSP28335函數pow()運算的速度如何?

    大家好! 本人是DSP28335的菜鳥,最近在做計算時需要用到pow()運算,大約能用到4到5次運算,pow()是double雙精度運算,不知道這個函數的速度如何,很多資料說雙精度運算很慢,不知
    發表于 09-05 11:08

    OPPO R9S楊版哄搶空 后續還有紅色“驚喜版”

    本月20日,OPPO R9s楊定制版“小Phone”正式推出,23日上午10:00,OPPO R9s楊定制版——小phone在OPPO官網正式開售,開售后32秒就被拍完,47分
    發表于 12-26 17:29 ?5023次閱讀

    個安全可驗證的方陣云計算外包協議

    為解決計算能力有限的對象(用戶)所面臨的大維數方陣的高次計算問題,利用云計算平臺(云端),提出個安全可驗證的方陣云計算外包協議。協議中,用戶首先構造個隨機置換,再結合克羅內克函
    發表于 01-17 13:50 ?0次下載
    <b class='flag-5'>一</b>個安全可驗證的方陣<b class='flag-5'>冪</b>云計算外包協議

    在高并發下怎么保證接口的性?

    前言 接口性問題,對于開發人員來說,是個跟語言無關的公共問題。本文分享了一些解決這類問題非常實用的辦法,絕大部分內容我在項目中實踐過的,給有需要的小伙伴
    的頭像 發表于 05-14 10:23 ?1780次閱讀
    在高并發下怎么保證接口的<b class='flag-5'>冪</b><b class='flag-5'>等</b>性?

    get與post的請求一些區別

    今天再次看到這個問題,我也有了一些新的理解和感觸,臨時回顧了下 get 與 post 的請求一些區別。
    的頭像 發表于 09-07 10:00 ?1365次閱讀

    分析解決(性)的方法

    這個概念,是個數學上的概念,即:f……(f(f(x))) = f(x)。用在計算機領域,指的是系統里的接口或方法對外的種承諾,使用相同參數對同
    的頭像 發表于 10-14 10:08 ?914次閱讀

    Spring Boot實現接口性的4種方案

    個數學與計算機學概念,在數學中某元運算為時,其作用在任
    的頭像 發表于 11-08 10:21 ?975次閱讀

    什么是性?的實現原理

    在編程中操作的特點是其任意多次執行所產生的影響均與次執行的影響相同。函數,或
    發表于 01-05 10:40 ?6032次閱讀

    DS5250微控制器的模時序

    用于許多加密算法。任何實現這些算法之的人都必須知道操作大約需要多長時間。本應用筆記描述了如何在DS5250高速、安全微控制器上完成模運算。它列出了運行各種表達式的典型時間,并描述了獲取計時的代碼流。
    的頭像 發表于 01-11 16:02 ?680次閱讀
    DS5250微控制器的模<b class='flag-5'>冪</b>時序

    個注解,優雅的實現接口性!

    除了查詢和刪除之外,還有更新操作,同樣的更新操作在大多數場景下也是天然的,其例外是也會存在ABA的問題,更重要的是,比如執行update table set a = a + 1 where v = 1這樣的更新就
    的頭像 發表于 08-26 14:36 ?865次閱讀
    <b class='flag-5'>一</b>個注解,優雅的實現接口<b class='flag-5'>冪</b><b class='flag-5'>等</b>性!

    基于接口性解決方案

    接口性是指無論調用接口的次數是次還是多次,對于同資源的操作都只會產生次結果。換句話說,多次重復調用相同的接口
    的頭像 發表于 09-30 16:27 ?411次閱讀
    基于接口<b class='flag-5'>冪</b><b class='flag-5'>等</b>性解決方案

    為什么要實現性校驗 如何實現接口的性校驗

    前端重復提交表單:在填寫一些表格時候,用戶填寫完成提交,很多時候會因網絡波動沒有及時對用戶做出提交成功響應,致使用戶認為沒有成功提交,然后直點提交按鈕,這時就會發生重復提交表單請求。
    的頭像 發表于 02-20 14:14 ?1138次閱讀

    探索LabVIEW編程接口性原理與實踐

    性原來是數學上的概念,在編程領域可以理解為:多次請求個資源或執行某個操作時應該具有唯
    的頭像 發表于 02-29 10:24 ?555次閱讀
    探索LabVIEW編程接口<b class='flag-5'>冪</b><b class='flag-5'>等</b>性原理與實踐