1. 程式人生 > >ASP Net Core – CORS 預檢請求

ASP Net Core – CORS 預檢請求

CORS(跨源資源共享)是一種機制,它允許同一個來源執行的Web應用程式從在另一個來源執行的伺服器訪問資源。同源策略是一種非常嚴格的措施,因為它只允許與伺服器起源於同一源的應用程式訪問其資源。很多時候,我們需要將資源的訪問許可權授予第三方,或者這是內部要求,即在不同的主機上執行應用程式。幸運的是,CORS使我們能夠保護伺服器免受濫用的外部呼叫的侵擾。CORS允許我們定義(除其他設定外)誰可以訪問我們的資源。

對於某些 CORS 請求,瀏覽器會在發出實際請求之前傳送額外的 OPTIONS 請求。 此請求稱為 預檢請求。 如果滿足以下 所有 條件,瀏覽器可以跳過預檢請求:

  • 請求方法為 GET、HEAD 或 POST。
  • 應用不會設定、、、或以外的請求標頭 Accept
    Accept-Language Content-Language Content-Type Last-Event-ID
  • Content-Type標頭(如果已設定)具有以下值之一:
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

對於簡單的請求,伺服器必須僅通過新增以下標頭來允許源:“ Access-Control-Allow-Origin:*”, 收到預檢請求後,瀏覽器將使用OPTIONS方法自動傳送初始請求,以確定實際請求可以安全傳送的請求。具體參見ASP.NET Core的CORS 文件:https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-5.0.

下面的示例顯示,在不同來源執行的blazor 應用程式的呼叫將失敗,因為伺服器未發出“ Access-Control-Allow-Origin”標頭:

Blazor App 請求API

該呼叫是一個簡單的請求,但由於伺服器不信任源而仍然失敗。我們可以告訴他信任它,以解決此問題。

我們要做的就是向它傳送帶有適當Header 的狀態程式碼為200的響應。並且對於我們的請求,我們還將指定Content-Type標頭 -- application/vnd.serilog.clef

第一個請求是“選項”請求:

第二個請求是我們的請求:

現在您可以看到已經執行了2個請求,並且瀏覽器中不再出現錯誤,這意味著請求已成功完成並且收到了響應。

相關推薦

ASP Net Core – CORS 請求

CORS(跨源資源共享)是一種機制,它允許同一個來源執行的Web應用程式從在另一個來源執行的伺服器訪問資源。同源策略是一種非常嚴格的措施,因為它只允許與伺服器起源於同一源的應用程式訪問其資源。很多時候,我們需要將資源的訪問許可權授予第三方,或者這是內部要求,即在不同的主機上執行應用程式。幸運的是,CORS使我

[Asp.net core]使用Polly網絡請求異常重試

chain code from valid 異常 cond throw string 支持 摘要 在網絡傳輸過程中,不能保證所有的請求都能正確的被服務端接受或者處理,那麽進行簡單的重試可以進行簡單的補救。比如現在大部分支付功能,在支付成功之後,需要回調我們網站的接口,並且

asp.net core 使用SignalR跨域請求出現的坑

前段時間因為工作需要,認識到了SignalR,這個東西本身挺好用,但是在處理跨域問題上是遭遇了很大的坑。 我在本地通過localhost連線的時候毫無問題,但是當我在前端使用IP來連線我的後臺,則會出現連線失敗的問題。查閱了很多,詢問公司內的大牛之後,找到一個正確解決方案,

ASP.NET Core應用針對靜態檔案請求的處理[3]: StaticFileMiddleware中介軟體如何處理針對檔案請求

我們通過《以Web的形式釋出靜態檔案》和《條件請求與區間請求》中的例項演示,以及上面針對條件請求和區間請求的介紹,從提供的功能和特性的角度對這個名為StaticFileMiddleware的中間進行了全面的介紹,接下來我們將更近一步,將從實現原理的角度來進一步認識這個中介軟體。 [本文已經同步到《ASP.NE

ASP.NET Core應用針對靜態檔案請求的處理[2]: 條件請求與區間請求

通過呼叫ApplicationBuilder的擴充套件方法UseStaticFiles註冊的StaticFileMiddleware中介軟體幫助我們處理針對檔案的請求。對於StaticFileMiddleware處理請求的邏輯,大部分讀者都應該想得到:它根據請求的地址找到目標檔案的路徑,然後利用註冊的Cont

ASP.NET Core應用針對靜態檔案請求的處理[1]: 以Web的形式釋出靜態檔案

雖然ASP.NET Core是一款“動態”的Web服務端框架,但是在很多情況下都需要處理針對靜態檔案的請求,最為常見的就是這對JavaScript指令碼檔案、CSS樣式檔案和圖片檔案的請求。針對不同格式的靜態檔案請求的處理,ASP.NET Core為我們提供了三個中介軟體,它們將是本系列文章論述的重點。不過在

學習ASP.NET Core, 怎能不瞭解請求處理管道[3]: 自定義一個伺服器感受一下管道是如何監聽、接收和響應請求

我們在《伺服器在管道中的“龍頭”地位》中對ASP.NET Core預設提供的具有跨平臺能力的KestrelServer進行了介紹,為了讓讀者朋友們對管道中的伺服器具有更加深刻的認識,接下來我們採用例項演示的形式建立一個自定義的伺服器。這個自定義的伺服器直接利用HttpListener來完成針對請求的監聽、接收

ASP.NET Core應用針對靜態檔案請求的處理[4]: DirectoryBrowserMiddleware中介軟體如何呈現目錄結構

和StaticFileMiddleware中介軟體一樣,DirectoryBrowserMiddleware中間本質上還是定義了一個請求地址與某個物理目錄之間的對映關係,而目標目錄體現為一個FileProvider物件。當這個中介軟體接收到匹配的請求後,會根據請求地址解析出對應目錄的相對路徑,並利用這個Fil

學習ASP.NET Core, 怎能不瞭解請求處理管道[6]: 管道是如何隨著WebHost的開啟被構建出來的?

註冊的伺服器和中介軟體共同構成了ASP.NET Core用於處理請求的管道, 這樣一個管道是在我們啟動作為應用宿主的WebHost時構建出來的。要深刻了解這個管道是如何被構建出來的,我們就必須對WebHost和它的建立者WebHostBuilder這個重要的物件具有深刻的理解。[本文已經同步到《ASP.NET

學習ASP.NET Core,怎能不瞭解請求處理管道[2]: 伺服器在管道中的“龍頭”地位

ASP.NET Core管道由註冊的伺服器和一系列中介軟體構成。我們在上一篇中深入剖析了中介軟體,現在我們來了解一下伺服器。伺服器是ASP .NET Core管道的第一個節點,它負責完整請求的監聽和接收,最終對請求的響應同樣也由它完成。[本文已經同步到《ASP.NET Core框架揭祕》之中] 伺服器是我們對

學習ASP.NET Core, 怎能不瞭解請求處理管道[5]: 中介軟體註冊可以除了可以使用Startup之外,還可以選擇StartupFilter

中介軟體的註冊除了可以藉助Startup物件(DelegateStartup或者ConventionBasedStartup)來完成之外,也可以利用另一個叫做StartupFilter的物件來實現。所謂的StartupFilter是對所有實現了IStartupFilter介面的型別及其物件的統稱。IStart

學習ASP.NET Core,怎能不瞭解請求處理管道[1]: 中介軟體究竟是個什麼東西?

ASP.NET Core管道雖然在結構組成上顯得非常簡單,但是在具體實現上卻涉及到太多的物件,所以我們在 “通過重建Hosting系統理解HTTP請求在ASP.NET Core管道中的處理流程”(上篇、中篇、下篇) 中圍繞著一個經過極度簡化的模擬管道講述了真實管道構建的方式以及處理HTTP請求的流程。在本系列

ASP.NET Core應用針對靜態檔案請求的處理[5]: DefaultFilesMiddleware中介軟體如何顯示預設頁面

DefaultFilesMiddleware中介軟體的目的在於將目標目錄下的預設檔案作為響應內容。我們知道,如果直接請求的就是這個預設檔案,那麼前面介紹的StaticFileMiddleware中介軟體會將這個檔案響應給客戶端。如果我們能夠將針對目錄的請求重定向到這個預設檔案上,一切就迎刃而解了。實際上Def

學習ASP.NET Core, 怎能不瞭解請求處理管道[4]: 應用的入口——Startup

一個ASP.NET Core應用被啟動之後就具有了針對請求的處理能力,而這個能力是由管道賦予的,所以應用的啟動同時意味著管道的成功構建。由於管道是由註冊的伺服器和若干中介軟體構成的,所以應用啟動過程中一個核心的工作就是完成中間節的註冊。由於依賴注入在ASP.NET Core應用這得到非常廣泛的應用,框架絕大部

防止ASP.NET Core中的跨站點請求偽造(XSRF / CSRF)攻擊

命名 oval 描述 new 常用 wrap rtu dagger 濾波器 跨站點請求偽造(也稱為XSRF或CSRF,發音為see-surf)是對Web托管應用程序的攻擊,其中惡意Web應用程序可以影響客戶端瀏覽器與信任該瀏覽器的Web應用程序之間的交互。這些攻擊是可能的,

如何ASP.NET Core Razor中處理Ajax請求

在ASP.NET Core Razor(以下簡稱Razor)剛出來的時候,看了一下官方的文件,一

ASP.NET Core中介軟體計算Http請求時間

ASP.NET Core通過RequestDelegate這個委託型別來定義中介軟體 public delegate Task RequestDelegate(HttpContext context); 可將一個單獨的請求委託並行指定為匿名方法(稱為並行中介軟體),或在類中對其進行定義。可通過Use,或在Mi

ASP.NET Core Razor 檢視編譯、動態編譯

0x01 前言 ASP.NET Core在預設釋出情況下,會啟動預編譯將試圖編譯成xx.Views.dll,也許在檢視中打算修改一處很細小的地方我們需要再重新編譯檢視進行釋出。下面我將從 ASP.NET Core 3 之前版本到 ASP.NET Core 3X 之後版本的一個配置列下下方供大家參考。 0

ASP.NET Core - 實現Http自定義請求頭策略

  前言     在正常的情況下,當我們系統用到JWT認證方式時,需要在Http請求頭新增Authorization: XXX,這樣在後臺服務的控制器中打上[Authorize]授權標籤,就限定所有的請求必須通過鑑權方可訪問。   在【ASP.NET Core - 基於IHttpContextAccessor

ASP.NET Core使用HttpClient的同步和異步請求

.text pcl gets 請求 con text timeout help ear using System; using System.Collections.Generic; using System.Net.Http; using System.Text