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

字節(jié)一面:post為什么會發(fā)送兩次請求?

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

字節(jié)一面:post為什么會發(fā)送兩次請求?,前端,前端,javascript,網(wǎng)絡(luò)

前言

最近博主在字節(jié)面試中遇到這樣一個面試題,這個問題也是前端面試的高頻問題,因?yàn)樵谇岸碎_發(fā)的日常開發(fā)中我們總是會與post請求打交道,一個小小的post請求也是牽扯到很多知識點(diǎn)的,博主在這給大家細(xì)細(xì)道來。


?? 作者簡介:程序員小豪,全棧工程師,熱愛編程,曾就職于蔚來、騰訊,現(xiàn)就職于某互聯(lián)網(wǎng)大廠,技術(shù)棧:Vue、React、Python、Java
?? 本文收錄于小豪的前端系列專欄,后續(xù)還會更新前端入門以及前端面試的一些相關(guān)文章,手把手帶你從零學(xué)習(xí)前端到面試找工作,并如果有想進(jìn)入前端領(lǐng)域工作的同學(xué),這個前端專欄會對你有所幫助,歡迎關(guān)注起來呀
?? 本人也會持續(xù)的去關(guān)注AIGC以及人工智能領(lǐng)域的一些動向并總結(jié)到博客中,大家感興趣的可以關(guān)注一下我的人工智能專欄
?? 云原生的入門學(xué)習(xí)系列,大家有興趣的可以看一看

同源策略

在瀏覽器中,內(nèi)容是很開放的,任何資源都可以接入其中,如 JavaScript 文件、圖片、音頻、視頻等資源,甚至可以下載其他站點(diǎn)的可執(zhí)行文件。

但也不是說瀏覽器就是完全自由的,如果不加以控制,就會出現(xiàn)一些不可控的局面,例如會出現(xiàn)一些安全問題,如:

  • 跨站腳本攻擊(XSS)
  • SQL 注入攻擊
  • OS 命令注入攻擊
  • HTTP 首部注入攻擊
  • 跨站點(diǎn)請求偽造(CSRF)
  • 等等…

如果這些都沒有限制的話,對于我們用戶而言,是相對危險的,因此需要一些安全策略來保障我們的隱私和數(shù)據(jù)安全。

這就引出了最基礎(chǔ)、最核心的安全策略:同源策略。

什么是同源策略

同源策略是一個重要的安全策略,它用于限制一個源的文檔或者它加載的腳本如何能與另一個源的資源進(jìn)行交互。

如果兩個 URL 的協(xié)議、主機(jī)和端口都相同,我們就稱這兩個 URL 同源。

  • 協(xié)議:協(xié)議是定義了數(shù)據(jù)如何在計算機(jī)內(nèi)和之間進(jìn)行交換的規(guī)則的系統(tǒng),例如 HTTP、HTTPS。
  • 主機(jī):是已連接到一個計算機(jī)網(wǎng)絡(luò)的一臺電子計算機(jī)或其他設(shè)備。網(wǎng)絡(luò)主機(jī)可以向網(wǎng)絡(luò)上的用戶或其他節(jié)點(diǎn)提供信息資源、服務(wù)和應(yīng)用。使用 TCP/IP 協(xié)議族參與網(wǎng)絡(luò)的計算機(jī)也可稱為 IP 主機(jī)。
  • 端口:主機(jī)是計算機(jī)到計算機(jī)之間的通信,那么端口就是進(jìn)程到進(jìn)程之間的通信。

如下表給出了與 URL http://test.home.com:8080/dir/page.html 的源進(jìn)行對比的示例:

URL 結(jié)果 原因
http://test.home.com:8080/dir/page.html 同源 只有路徑不同
http://test.home.com:8080/dir/inner/another.html 同源 只有路徑不同
https://test.home.com:8080/secure.html 不同源 協(xié)議不同,HTTP 和 HTTPS
http://test.home.com:8081/dir/etc.html 不同源 端口不同
http://online.home.com:8080/dir/other.html 不同源 主機(jī)不同

同源策略主要表現(xiàn)在以下三個方面:DOM、Web 數(shù)據(jù)和網(wǎng)絡(luò)。

  • DOM 訪問限制:同源策略限制了網(wǎng)頁腳本(如 JavaScript)訪問其他源的 DOM。這意味著通過腳本無法直接訪問跨源頁面的 DOM 元素、屬性或方法。這是為了防止惡意網(wǎng)站從其他網(wǎng)站竊取敏感信息。
  • Web 數(shù)據(jù)限制:同源策略也限制了從其他源加載的 Web 數(shù)據(jù)(例如 XMLHttpRequest 或 Fetch API)。在同源策略下,XMLHttpRequest 或 Fetch 請求只能發(fā)送到與當(dāng)前網(wǎng)頁具有相同源的目標(biāo)。這有助于防止跨站點(diǎn)請求偽造(CSRF)等攻擊。
  • 網(wǎng)絡(luò)通信限制:同源策略還限制了跨源的網(wǎng)絡(luò)通信。瀏覽器會阻止從一個源發(fā)出的請求獲取來自其他源的響應(yīng)。這樣做是為了確保只有受信任的源能夠與服務(wù)器進(jìn)行通信,以避免惡意行為。

出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源 HTTP 請求,XMLHttpRequest 和 Fetch API,只能從加載應(yīng)用程序的同一個域請求 HTTP 資源,除非使用 CORS 頭文件

CORS

對于瀏覽器限制這個詞,要著重解釋一下:不一定是瀏覽器限制了發(fā)起跨站請求,也可能是跨站請求可以正常發(fā)起,但是返回結(jié)果被瀏覽器攔截了。

瀏覽器將不同域的內(nèi)容隔離在不同的進(jìn)程中,網(wǎng)絡(luò)進(jìn)程負(fù)責(zé)下載資源并將其送到渲染進(jìn)程中,但由于跨域限制,某些資源可能被阻止加載到渲染進(jìn)程。如果瀏覽器發(fā)現(xiàn)一個跨域響應(yīng)包含了敏感數(shù)據(jù),它可能會阻止腳本訪問這些數(shù)據(jù),即使網(wǎng)絡(luò)進(jìn)程已經(jīng)獲得了這些數(shù)據(jù)。CORB 的目標(biāo)是在渲染之前盡早阻止惡意代碼獲取跨域數(shù)據(jù)。

CORB 是一種安全機(jī)制,用于防止跨域請求惡意訪問跨域響應(yīng)的數(shù)據(jù)。渲染進(jìn)程會在 CORB 機(jī)制的約束下,選擇性地將哪些資源送入渲染進(jìn)程供頁面使用。

例如,一個網(wǎng)頁可能通過 AJAX 請求從另一個域的服務(wù)器獲取數(shù)據(jù)。雖然某些情況下這樣的請求可能會成功,但如果瀏覽器檢測到請求返回的數(shù)據(jù)可能包含惡意代碼或與同源策略沖突,瀏覽器可能會阻止網(wǎng)頁訪問返回的數(shù)據(jù),以確保用戶的安全。

跨源資源共享(Cross-Origin Resource Sharing,CORS)是一種機(jī)制,允許在受控的條件下,不同源的網(wǎng)頁能夠請求和共享資源。由于瀏覽器的同源策略限制了跨域請求,CORS 提供了一種方式來解決在 Web 應(yīng)用中進(jìn)行跨域數(shù)據(jù)交換的問題。

CORS 的基本思想是,服務(wù)器在響應(yīng)中提供一個標(biāo)頭(HTTP 頭),指示哪些源被允許訪問資源。瀏覽器在發(fā)起跨域請求時會先發(fā)送一個預(yù)檢請求(OPTIONS 請求)到服務(wù)器,服務(wù)器通過設(shè)置適當(dāng)?shù)?CORS 標(biāo)頭來指定是否允許跨域請求,并指定允許的請求源、方法、標(biāo)頭等信息。

簡單請求

不會觸發(fā) CORS 預(yù)檢請求。這樣的請求為 簡單請求,。若請求滿足所有下述條件,則該請求可視為 簡單請求

  1. HTTP 方法限制:只能使用 GET、HEAD、POST 這三種 HTTP 方法之一。如果請求使用了其他 HTTP 方法,就不再被視為簡單請求。
  2. 自定義標(biāo)頭限制:請求的 HTTP 標(biāo)頭只能是以下幾種常見的標(biāo)頭:AcceptAccept-Language、Content-LanguageLast-Event-ID、Content-Type(僅限于 application/x-www-form-urlencoded、multipart/form-data、text/plain)。HTML 頭部 header field 字段:DPR、Download、Save-Data、Viewport-Width、WIdth。如果請求使用了其他標(biāo)頭,同樣不再被視為簡單請求。
  3. 請求中沒有使用 ReadableStream 對象。
  4. 不使用自定義請求標(biāo)頭:請求不能包含用戶自定義的標(biāo)頭。
  5. 請求中的任意 XMLHttpRequestUpload 對象均沒有注冊任何事件監(jiān)聽器;XMLHttpRequestUpload 對象可以使用 XMLHttpRequest.upload 屬性訪問

預(yù)檢請求

非簡單請求的 CORS 請求,會在正式通信之前,增加一次 HTTP 查詢請求,稱為 預(yù)檢請求

需預(yù)檢的請求要求必須首先使用 OPTIONS 方法發(fā)起一個預(yù)檢請求到服務(wù)器,以獲知服務(wù)器是否允許該實(shí)際請求。預(yù)檢請求 的使用,可以避免跨域請求對服務(wù)器的用戶數(shù)據(jù)產(chǎn)生未預(yù)期的影響。

例如我在自己的網(wǎng)站上刪除一條記錄:

字節(jié)一面:post為什么會發(fā)送兩次請求?,前端,前端,javascript,網(wǎng)絡(luò)

它首先會發(fā)起一個預(yù)檢請求,預(yù)檢請求的頭信息包括兩個特殊字段:

  • Access-Control-Request-Method:該字段是必須的,用來列出瀏覽器的 CORS 請求會用到哪些 HTTP 方法,上例是 POST。
  • Access-Control-Request-Headers:該字段是一個逗號分隔的字符串,指定瀏覽器 CORS 請求會額外發(fā)送的頭信息字段,上例是 content-type,x-secsdk-csrf-token
  • access-control-allow-origin:在上述例子中,表示 https://xxx.cn 可以請求數(shù)據(jù),也可以設(shè)置為* 符號,表示統(tǒng)一任意跨源請求。
  • access-control-max-age:該字段可選,用來指定本次預(yù)檢請求的有效期,單位為秒。上面結(jié)果中,有效期是 1 天(86408 秒),即允許緩存該條回應(yīng) 1 天(86408 秒),在此期間,不用發(fā)出另一條預(yù)檢請求。

一旦服務(wù)器通過了 預(yù)檢請求,以后每次瀏覽器正常的 CORS 請求,就都跟簡單請求一樣,會有一個 Origin 頭信息字段。服務(wù)器的回應(yīng),也都會有一個 Access-Control-Allow-Origin 頭信息字段。

字節(jié)一面:post為什么會發(fā)送兩次請求?,前端,前端,javascript,網(wǎng)絡(luò)

上面頭信息中,Access-Control-Allow-Origin 字段是每次回應(yīng)都必定包含的。

附帶身份憑證的請求與通配符

在響應(yīng)附帶身份憑證的請求時:

  • 為了避免惡意網(wǎng)站濫用 Access-Control-Allow-Origin 頭部字段來獲取用戶敏感信息,服務(wù)器在設(shè)置時不能將其值設(shè)為通配符 *。相反,應(yīng)該將其設(shè)置為特定的域,例如:Access-Control-Allow-Origin: https://xxx.cn。通過將 Access-Control-Allow-Origin 設(shè)置為特定的域,服務(wù)器只允許來自指定域的請求進(jìn)行跨域訪問。這樣可以限制跨域請求的范圍,避免不可信的域獲取到用戶敏感信息。
  • 為了避免潛在的安全風(fēng)險,服務(wù)器不能將 Access-Control-Allow-Headers 的值設(shè)為通配符 *。這是因?yàn)椴皇芟拗频恼埱箢^可能被濫用。相反,應(yīng)該將其設(shè)置為一個包含標(biāo)頭名稱的列表,例如:Access-Control-Allow-Headers: X-PINGOTHER, Content-Type。通過將 Access-Control-Allow-Headers 設(shè)置為明確的標(biāo)頭名稱列表,服務(wù)器可以限制哪些自定義請求頭是允許的。只有在允許的標(biāo)頭列表中的頭部字段才能在跨域請求中被接受。
  • 為了避免潛在的安全風(fēng)險,服務(wù)器不能將 Access-Control-Allow-Methods 的值設(shè)為通配符 *。這樣做將允許來自任意域的請求使用任意的 HTTP 方法,可能導(dǎo)致濫用行為的發(fā)生。相反,應(yīng)該將其設(shè)置為一個特定的請求方法名稱列表,例如:Access-Control-Allow-Methods: POST, GET。通過將 Access-Control-Allow-Methods 設(shè)置為明確的請求方法列表,服務(wù)器可以限制哪些方法是允許的。只有在允許的方法列表中的方法才能在跨域請求中被接受和處理。
  • 對于附帶身份憑證的請求(通常是 Cookie),

這是因?yàn)檎埱蟮臉?biāo)頭中攜帶了 Cookie 信息,如果 Access-Control-Allow-Origin 的值為 *,請求將會失敗。而將 Access-Control-Allow-Origin 的值設(shè)置為 https://xxx.cn,則請求將成功執(zhí)行。

另外,響應(yīng)標(biāo)頭中也攜帶了 Set-Cookie 字段,嘗試對 Cookie 進(jìn)行修改。如果操作失敗,將會拋出異常。

完整的請求流程圖

字節(jié)一面:post為什么會發(fā)送兩次請求?,前端,前端,javascript,網(wǎng)絡(luò)

總結(jié)

預(yù)檢請求是在進(jìn)行跨域資源共享 CORS 時,由瀏覽器自動發(fā)起的一種 OPTIONS 請求。它的存在是為了保障安全,并允許服務(wù)器決定是否允許跨域請求。

跨域請求是指在瀏覽器中向不同域名、不同端口或不同協(xié)議的資源發(fā)送請求。出于安全原因,瀏覽器默認(rèn)禁止跨域請求,只允許同源策略。而當(dāng)網(wǎng)頁需要進(jìn)行跨域請求時,瀏覽器會自動發(fā)送一個預(yù)檢請求,以確定是否服務(wù)器允許實(shí)際的跨域請求。

預(yù)檢請求中包含了一些額外的頭部信息,如 Origin 和 Access-Control-Request-Method 等,用于告知服務(wù)器實(shí)際請求的方法和來源。服務(wù)器收到預(yù)檢請求后,可以根據(jù)這些頭部信息,進(jìn)行驗(yàn)證和授權(quán)判斷。如果服務(wù)器認(rèn)可該跨域請求,將返回一個包含 Access-Control-Allow-Origin 等頭部信息的響應(yīng),瀏覽器才會繼續(xù)發(fā)送實(shí)際的跨域請求。

使用預(yù)檢請求機(jī)制可以有效地防范跨域請求帶來的安全風(fēng)險,保護(hù)用戶數(shù)據(jù)和隱私。文章來源地址http://www.zghlxwxcb.cn/news/detail-671451.html

到了這里,關(guān)于字節(jié)一面:post為什么會發(fā)送兩次請求?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(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)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

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

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

    一、如果是新購的機(jī)器 有的人是新買沒幾天的機(jī)器,因?yàn)殚_始diY的時候忙著測試機(jī)器性能分?jǐn)?shù),裝操作系統(tǒng)什么的,電腦老開著烤機(jī),沒發(fā)現(xiàn)這個問題。 等到一切安定下來后,才發(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日
    瀏覽(24)
  • TCP為什么要三次握手,而不是兩次或四次?

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

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

    2023年04月26日
    瀏覽(27)
  • 阿里一面:MySQL 單表數(shù)據(jù)最大不要超過多少行?為什么?這樣回答滿分!

    阿里一面:MySQL 單表數(shù)據(jù)最大不要超過多少行?為什么?這樣回答滿分!

    來源:https://my.oschina.net/u/4090830/blog/5559454 作為在后端圈開車的多年老司機(jī),是不是經(jīng)常聽到過,“mysql 單表最好不要超過 2000w”,“單表超過 2000w 就要考慮數(shù)據(jù)遷移了”,“你這個表數(shù)據(jù)都馬上要到 2000w 了,難怪查詢速度慢” 這些名言民語就和 “群里只討論技術(shù),不開車,

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

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

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

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

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

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

    2024年02月16日
    瀏覽(32)
  • 為什么要做字節(jié)對齊 alignment?

    下面這段 C++ 代碼的輸出是什么?定義的 Type 占用的字節(jié)數(shù)(下面簡稱為字節(jié)數(shù))是多少呢? 經(jīng)過編譯運(yùn)行,在 x86-64 Linux 機(jī)器上輸出的結(jié)果是 8 。如果將成員變量的字節(jié)數(shù)相加求和,等于 1 + 4 = 5 字節(jié)。那多出來的 3 字節(jié)做什么了? 一般,我們會把多出的 3 字節(jié)用來做字節(jié)

    2024年02月07日
    瀏覽(19)
  • (快手一面)分布式系統(tǒng)是什么?為什么要分布式系統(tǒng)?分布式環(huán)境下會有哪些問題?分布式系統(tǒng)是如何實(shí)現(xiàn)事務(wù)的?

    《分布式系統(tǒng)原理與泛型》中這么定義分布式系統(tǒng): “ 分布式系統(tǒng)是若干獨(dú)立計算機(jī)的集合, 這些計算機(jī)對于用戶來說就像單個相關(guān)系統(tǒng) ”, 分布式系統(tǒng)(distributed system)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。 就比如:用戶在使用京東這個分布式系統(tǒng)的時候,會感覺是在使用一

    2024年02月08日
    瀏覽(26)
  • 為什么字節(jié)大量用GO而不是Java?

    為什么字節(jié)大量用GO而不是Java?

    見字 如面,我是軍哥。 我看很多程序員對字節(jié)編程語言選型很好奇,為此我還特地問了在字節(jié)的兩位4-1的技術(shù)大佬朋友,然后加上自己的思考,總結(jié)了一下就以下 2 個原因: 1、 選型上沒有歷史包袱 字節(jié)的早期的程序員大多來自于百度、360,本身就是 php / c++ 的背景,一開

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

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

    2024年02月14日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包