CORS

来源:https://www.cnblogs.com/thyshare/archive/2019/12/27/12108150.html
-Advertisement-
Play Games

目錄 "引子" "簡介" "Request Header" "Response Header" "Preflight Request" "參考資料" 引子 全稱 Cross Origin Resource Sharing,跨源資源共用,是跨域的解決方案之一,裡面有不少的知識點,在此集中整理。 [Or ...


目錄

引子

CORS 全稱 Cross-Origin Resource Sharing,跨源資源共用,是跨域的解決方案之一,裡面有不少的知識點,在此集中整理。

簡介

瀏覽器的同源策略是一個重要的安全機制,不同源的客戶端在沒有授權的情況下,不能夠訪問對方的資源。同源的定義是訪問鏈接的協議、功能變數名稱和埠號均相同。在實際應用中,合理的跨域請求對於一些應用程式也很重要, CORS 標准定義了在訪問跨域資源時,瀏覽器與伺服器應該如何溝通。CORS 的基本思想是使用 HTTP 頭部讓瀏覽器與伺服器進行溝通,從而決定請求是否能夠成功。

CORS 標準中新增了一組 HTTP 首部欄位,用於瀏覽器和伺服器之間溝通。在跨域請求中,在一些情況下會有一個預檢請求(preflight request),是用來檢查是否允許這種類型的請求,這種請求使用 OPTIONS 方法。預檢請求的使用,可以避免跨域請求對伺服器的數據產生未預期的影響。接下來看看相關具體的內容。

Request Header

CORS 涉及以下的請求頭:

Origin

表示跨域請求或預請求來自哪裡。

Access-Control-Request-Method

在使用 OPTION 方法時會用到,表示對同一資源的將來跨域請求可能使用的方法。

Access-Control-Request-Headers

在使用 OPTION 方法時會用到,表示對統一資源將來跨域請求可能使用的請求頭部。

Response Header

CORS 涉及以下響應頭:

Access-Control-Allow-Origin

表示是否能夠共用響應。如果伺服器認為請求可以接受,就設置該頭部為請求頭的 Origin 信息或者 * ;如果沒有這個頭部,或者這個頭部的信息跟請求的 Origin 信息不匹配,瀏覽器就會駁回請求。

Access-Control-Allow-Credentials

表示跨域請求是否提供憑據。預設情況下,跨域請求不提供憑據,設置該頭部為 true 時,表示對應的請求應該發送憑據。如果伺服器的響應中沒有設置該頭部,但發送的請求中帶了憑據,瀏覽器會調用到 onerror 事件處理程式。如果是 fetch 請求,該值設置為 include

Access-Control-Allow-Methods

表示跨域請求支持的方法。

Access-Control-Allow-Headers

表示跨域請求支持的頭部。

Access-Control-Max-Age

表示預請求可以緩存多長時間,以秒為單位。

Access-Control-Expose-Headers

通過列出其名稱,指示哪些頭部可以作為響應的一部分公開。

Back to top

Preflight Request

上面有提到在一定條件下,會先觸發預檢請求,當請求滿足下麵任一條件時,就需要先發預檢請求:

  • 使用 PUTDELETECONNECTOPTIONSTRACEPATCH 中任一方法。
  • 人為設置了對 CORS 安全的首部欄位集合之外的首部欄位,該集合在正式標準中包含 AcceptAccept-LanguageContent-LanguageContent-Type(還有額外限制)。
  • Content-Type 的值不是 application/x-www-form-urlencodedmultipart/form-datatext/plain 其中之一。
  • 請求中 XMLHttpRequestUpload 對象註冊了事件監聽器。
  • 請求中使用了 ReadableStream 對象。

如果請求滿足下麵所有條件,就不會觸發預請求:

  • 使用 GETHEADPOST 方法之一。
  • 不得人為設置對 CORS 安全的首部欄位集合之外的首部欄位,該集合在正式標準中包含 AcceptAccept-LanguageContent-LanguageContent-Type(還有額外限制)。
  • Content-Type 的值僅限 application/x-www-form-urlencodedmultipart/form-datatext/plain 其中之一。
  • 請求中 XMLHttpRequestUpload 對象沒有註冊任何事件監聽器。
  • 請求中沒有使用了 ReadableStream 對象。
Back to top

參考資料


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Janus說明 Android APP僅使用V1簽名,可能存在Janus漏洞(CVE 2017 13156),Janus漏洞(CVE 2017 13156)允許攻擊者在不改變原簽名的情況下任意修改APP中的代碼邏輯。 影響範圍:Android系統5.1.1 8.0 檢測方式 方式1 使用GetApk ...
  • MAC停靠欄 ~~~javascript ~~~ ...
  • 實例對象使用屬性和方法層層的搜索: 實例對象使用的屬性或者方法, 先在實例中查找, 找到了則直接使用; 找不到則, 再去實例對象的__proto__指向的原型對象prototype中找, 找到了則使用, 找不到則報錯。 <!DOCTYPE html> <html lang="en"> <head> ...
  • 原型的簡單的語法 構造函數,通過原型添加方法,以下語法,手動修改構造器的指向 實例化對象,並初始化,調用方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>title</title> <script> fu ...
  • 什麼樣子的數據是需要寫在原型中? 需要共用的數據就可以寫原型中 原型的作用之一: 數據共用 //屬性需要共用, 方法也需要共用 //不需要共用的數據寫在構造函數中,需要共用的數據寫在原型中 //構造函數 function Student(name,age,sex) { this.name=name; ...
  • 在ant design 的form組件中 能用於提交的組件比較少,所以我在這寫了一個可以單選、多選標簽提交的組件,調用非常簡單。 代碼: 1 import React,{Fragment} from 'react'; 2 import { Tag,Icon,Input } from 'antd'; ...
  • 本文涵蓋 面試題的引入 對事件迴圈面試題執行順序的一些疑問 通過面試題對微任務、事件迴圈、定時器等對深入理解 結論總結 面試題 面試題如下,大家可以先試著寫一下輸出結果,然後再看我下麵的詳細講解,看看會不會有什麼出入,如果把整個順序弄清楚 Node.js 的執行順序應該就沒問題了。 async fu ...
  • 1. 需求 如果要你實現一個前端路由,應該如何實現瀏覽器的前進與後退 ? 2. 問題 首先瀏覽器中主要有這幾個限制,讓前端不能隨意的操作瀏覽器的瀏覽紀錄: •沒有提供監聽前進後退的事件。•不允許開發者讀取瀏覽紀錄,也就是 js 讀取不了瀏覽紀錄。•用戶可以手動輸入地址,或使用瀏覽器提供的前進後退來改 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...