国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

為什么POST請求經(jīng)常發(fā)送兩次?

這篇具有很好參考價(jià)值的文章主要介紹了為什么POST請求經(jīng)常發(fā)送兩次?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

大多數(shù)初級前端程序員,在通過瀏覽器F12的調(diào)試工具調(diào)試網(wǎng)絡(luò)請求時(shí),可能都會有一個(gè)發(fā)現(xiàn),在進(jìn)行POST請求時(shí),明明代碼里只請求了一次,為什么network里發(fā)送了兩次呢,難道我代碼出bug了?帶著疑問點(diǎn)開第一個(gè)請求才發(fā)現(xiàn),原來第一個(gè)是OPTIONS類型的請求,第二個(gè)才是我代碼里寫的POST類型的請求。那為什么,POST請求之前默認(rèn)伴隨著一個(gè)OPTIONS請求呢?

我本人也是在第一份實(shí)際工作中,才發(fā)現(xiàn)了這個(gè)事情,帶著疑問查詢了一些資料,才知曉了其中緣由。在這個(gè)過程中也了解到了一些不常用的HTTP協(xié)議請求的方法以及它們的作用,比如OPTIONS。

公眾號:Code程序人生,個(gè)人網(wǎng)站:https://creatorblog.cn

可能大多數(shù)程序員,職業(yè)生涯里,90%遇到和創(chuàng)造的接口都是GETPOST,秉持著"不用就不學(xué)"的原則,越來越多的HTTP協(xié)議的請求方法淡化在了大家視野里,自然在遇到的時(shí)候就不知道它是干啥的了。

背景

Web開發(fā)中,我們經(jīng)常會遇到跨域請求的問題。當(dāng)前端應(yīng)用試圖從一個(gè)源(origin)上的Web頁面訪問另一個(gè)源上的資源時(shí),瀏覽器會執(zhí)行跨域請求,其中POST請求常常會伴隨著兩次發(fā)送:一次OPTIONS請求(CORS預(yù)檢)和一次實(shí)際的POST請求。
為什么POST請求經(jīng)常發(fā)送兩次?,前端,面試,網(wǎng)絡(luò),前端,javascript,http,面試

為什么POST請求經(jīng)常發(fā)送兩次?,前端,面試,網(wǎng)絡(luò),前端,javascript,http,面試
為什么會有這兩次請求?下文我們繼續(xù)深入解釋這個(gè)問題,逐步探究CORS預(yù)檢的原因和機(jī)制。

什么是CORS(跨源資源共享)

CORS是一種瀏覽器的安全策略,用于控制一個(gè)源(domain、protocol、port的組合)的Web頁面是否可以請求另一個(gè)源的資源。CORS通過在服務(wù)器響應(yīng)頭中添加特定的字段,告訴瀏覽器是否允許來自其他源的請求。

為什么POST請求需要CORS預(yù)檢

POST請求通常用于向服務(wù)器提交數(shù)據(jù),但由于安全性考慮,瀏覽器會限制跨域POST請求。在實(shí)際發(fā)送POST請求之前,瀏覽器會發(fā)送一個(gè)OPTIONS請求,以便確認(rèn)目標(biāo)服務(wù)器是否允許實(shí)際的POST請求。

GET請求一定不需要CORS預(yù)檢嗎

CORS預(yù)檢是一種安全機(jī)制,用于控制跨域請求的訪問權(quán)限。對于簡單請求(Simple Requests),包括使用GET、HEAD、POST其中一種方法,且只使用了以下幾種簡單請求頭(Simple Request Headers)的請求,瀏覽器會自動(dòng)處理CORS,無需進(jìn)行預(yù)檢:

  1. Accept
  2. Accept-Language
  3. Content-Language
  4. Content-Type(僅限于 application/x-www-form-urlencoded、multipart/form-data、text/plain)

因此,GET請求通常不會觸發(fā)CORS預(yù)檢。只有當(dāng)你的請求是跨域的、使用了非簡單請求頭、或者使用了不支持的HTTP方法時(shí),才會觸發(fā)CORS預(yù)檢。對于非簡單請求,瀏覽器會在實(shí)際請求之前發(fā)送一個(gè)OPTIONS請求,用來確認(rèn)服務(wù)器是否支持跨域請求。而對于簡單請求,瀏覽器會直接發(fā)送實(shí)際的GET請求,不需要進(jìn)行預(yù)檢。

CORS預(yù)檢的過程

  1. 瀏覽器發(fā)送OPTIONS請求:

當(dāng)瀏覽器發(fā)現(xiàn)一個(gè)跨域的POST請求時(shí),它首先發(fā)送一個(gè)OPTIONS請求到目標(biāo)服務(wù)器,這是CORS預(yù)檢的開始。

  1. 服務(wù)器響應(yīng)CORS頭信息:

服務(wù)器接收到OPTIONS請求后,檢查請求中的信息,并返回響應(yīng)。響應(yīng)中包含了CORS頭信息,其中包括允許的HTTP方法、允許的請求頭等。如果服務(wù)器返回的CORS頭信息允許實(shí)際的POST請求,瀏覽器才會繼續(xù)發(fā)送實(shí)際的POST請求。

服務(wù)端示例代碼

在服務(wù)器端,你需要配置CORS,以允許來自特定源的POST請求。以下是Nodejs Express框架的示例:

const express = require('express');
const app = express();

// 配置CORS,允許所有源的POST請求
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*'); // 允許所有源
  res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); // 允許的HTTP方法
  res.header('Access-Control-Allow-Headers', 'Content-Type'); // 允許的請求頭
  next();
});

// 實(shí)際的POST請求處理
app.post('/api/data', (req, res) => {
  // 處理POST請求的邏輯
  res.send('POST請求成功!');
});

app.listen(3000, () => {
  console.log('服務(wù)器啟動(dòng)在端口 3000');
});

在上述代碼中,通過配置Access-Control-Allow-Origin、Access-Control-Allow-MethodsAccess-Control-Allow-Headers等響應(yīng)頭信息,服務(wù)器明確指定了允許的源、HTTP方法和請求頭。

總結(jié)

POST請求發(fā)送兩次的現(xiàn)象是因?yàn)闉g覽器在執(zhí)行跨域的POST請求時(shí),為了確保安全性,會發(fā)送一個(gè)OPTIONS請求進(jìn)行CORS預(yù)檢。服務(wù)器的CORS配置決定了是否允許實(shí)際的POST請求。理解CORS預(yù)檢的過程,能夠幫助我們更好地處理跨域請求問題,確保Web應(yīng)用的安全性和穩(wěn)定性。文章來源地址http://www.zghlxwxcb.cn/news/detail-720149.html

到了這里,關(guān)于為什么POST請求經(jīng)常發(fā)送兩次?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • tcp 為什么要三次握手,兩次不行嗎?為什么?

    TCP使用三次握手(Three-Way Handshake)的過程是為了確保雙方建立起可靠的通信連接,并在連接的建立過程中協(xié)商必要的參數(shù)。兩次握手是不夠的,原因主要有以下幾點(diǎn): 防止已失效的連接請求被接受: 假設(shè)有A和B兩臺主機(jī),A向B發(fā)送了一個(gè)連接請求,但由于某些原因?qū)е逻B接建

    2024年02月20日
    瀏覽(36)
  • 電腦開機(jī)為什么老是要兩次?

    電腦開機(jī)為什么老是要兩次?

    一、如果是新購的機(jī)器 有的人是新買沒幾天的機(jī)器,因?yàn)殚_始diY的時(shí)候忙著測試機(jī)器性能分?jǐn)?shù),裝操作系統(tǒng)什么的,電腦老開著烤機(jī),沒發(fā)現(xiàn)這個(gè)問題。 等到一切安定下來后,才發(fā)現(xiàn)開機(jī)的故障。 這種問題,多半是你的電源跟主板或是顯卡有沖突,或是供電不足造成的。

    2024年02月09日
    瀏覽(31)
  • TCP協(xié)議為什么要三次握手而不是兩次?

    TCP(Transmission Control Protocol,傳輸控制協(xié)議)的歷史可以追溯到1970年代初期,最初的版本是RFC 793,后來經(jīng)過多次更新和改進(jìn),包括RFC 1122、RFC 1323、RFC 2018、RFC 2581、RFC 2873、RFC 3168和RFC 4614等。其中,RFC 1323(TCP Extensions for High Performance)提出了TCP的高性能擴(kuò)展,RFC 2018(TCP Se

    2024年02月06日
    瀏覽(25)
  • 為什么跟蹤崩潰時(shí),經(jīng)常死在sleep?

    上周跟蹤崩潰,結(jié)論非常奇怪,似乎死在sleep。sleep是正宗系統(tǒng)函數(shù),這個(gè)也動(dòng)不動(dòng)崩潰,那系統(tǒng)每分鐘都要死幾次。所以肯定與sleep無關(guān)。 那么為什么看起來死在sleep上?其實(shí)這是一種錯(cuò)覺: 執(zhí)行工作時(shí)的速度很快,比如不到1毫秒。 剩下的時(shí)間都在sleep。 崩潰的時(shí)候,大概

    2024年01月22日
    瀏覽(18)
  • TCP為什么要三次握手,而不是兩次或四次?

    TCP為什么要三次握手,而不是兩次或四次?

    TCP連接時(shí)用于保證可靠性和流量控制維護(hù)的某些狀態(tài)信息,這些信息的組合,包括 Socket,序列號和窗口大小 稱為連接。 以上三個(gè)方面分析三次握手原因: 首要原因?yàn)榱朔乐古f的重復(fù)連接初始化造成混亂 網(wǎng)絡(luò)堵塞情況下,如果一個(gè)舊的SYN報(bào)文比新的SYN報(bào)文早到達(dá)了服務(wù)端,

    2023年04月26日
    瀏覽(28)
  • (學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?

    (學(xué)習(xí)筆記-TCP連接建立)TCP 為什么是三次握手?不是兩次、四次?

    常規(guī)回答:“因?yàn)槿挝帐植拍鼙WC雙方具有接收和發(fā)送的能力” 三次握手的 首要原因是為了防止舊的重復(fù)連接初始化造成混亂 。 假設(shè):客戶端先發(fā)送了SYN(seq=90)報(bào)文,然后客戶端宕機(jī)了,而且這個(gè)SYN報(bào)文還被網(wǎng)絡(luò)阻塞了,服務(wù)端并沒有收到,接著客戶端重啟后,又重新向

    2024年02月17日
    瀏覽(23)
  • 模型\視圖一般步驟:為什么經(jīng)常要用“選擇模型”QItemSelectionModel?

    模型\視圖一般步驟:為什么經(jīng)常要用“選擇模型”QItemSelectionModel?

    ???????????????????????? ???????????????????????????????? 一、“使用視圖”一般的步驟: //1. 創(chuàng)建? 模型(這里是數(shù)據(jù)模型!) tabModel = new QSqlTableModel ( this , DB ); // 數(shù)據(jù)表 //2. 設(shè)置? 視圖 的 模型(這里是數(shù)據(jù)模型!) ui - tableView - setModel ( tabModel ); 模

    2024年01月22日
    瀏覽(26)
  • TCP實(shí)現(xiàn)原理和為什么需要三次握手?兩次握手不可以?四次握手不可以?

    TCP實(shí)現(xiàn)原理和為什么需要三次握手?兩次握手不可以?四次握手不可以?

    TCP實(shí)現(xiàn)原理和為什么需要三次握手?兩次握手不可以?四次握手不可以? 1. 什么是TCP協(xié)議? TCP:Transmission Control Protocol翻譯過來就是傳輸控制協(xié)議,TCP協(xié)議是一個(gè)面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議 RFC 793對TCP連接的定義 Connections: The reliability and flow control mechanisms descri

    2024年02月16日
    瀏覽(32)
  • winform使用SetParent 嵌入excel,打開的excel跟隨dpi 25%*125%縮放了兩次,目前微軟官方?jīng)]有好的解決方案,為什么

    雙重縮放問題在將 Excel 嵌入到 WinForm 中時(shí)確實(shí)可能會出現(xiàn),這是因?yàn)閮蓚€(gè)不同的應(yīng)用程序(WinForm 和 Excel)之間的 DPI 縮放邏輯不一致,導(dǎo)致雙重縮放的結(jié)果。 在 Windows 操作系統(tǒng)中,DPI 縮放是一種全局的設(shè)置,用于適應(yīng)高 DPI 顯示設(shè)備,從而提高顯示元素的大小。當(dāng)您將 Ex

    2024年02月14日
    瀏覽(27)
  • 為什么要禁止除GET和POST之外的HTTP方法

    為什么要禁止除GET和POST之外的HTTP方法

    一, HTTP請求有哪些 GET和POST是最為常見方法,而且大部分主流網(wǎng)站只支持這兩種方法,因?yàn)樗鼈円呀?jīng)可以滿足功能需求。 GET獲取服務(wù)器資源 POST用來像服務(wù)器指定的URL的資源提交數(shù)據(jù)。 其余方法一般服務(wù)器不會響應(yīng),并拋出404或405. 二, 不安全的HTTP方法 OPTION方法:允許客戶

    2024年02月03日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包