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”標頭:

image

Blazor App 請求API

image

image

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

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

image

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

image

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

image

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

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章