簡體   English   中英

Web API CORS實施

[英]Web API CORS implementation

首先,我要了解CORS的概念以及它的主要工作原理,但是我對如何在Microsoft的Web API中實現有一個非常具體的問題。 我已經在Global.ascx.cs文件中配置了CORS,如下所示:

var cors = new EnableCorsAttribute("https://example.com", "*", "*");
config.EnableCors(cors);

現在,當我在Web api中請求標有Origin: https://example.com我得到一個包含標頭Access-Control-Allow-Origin: https://example.com Origin: https://example.com的響應。 。 但是,當我請求具有不同Origin值或完全沒有該標頭的相同資源時,來自服務器的響應沒有Access-Control-Allow-Origin標頭。

這是理想的結果嗎? 還是服務器應該始終使用Access-Control-Allow-Origin標頭進行響應?

我問是因為我們已經讓Veracode掃描了我們的代碼庫,並且他們說響應應該始終包含標頭Access-Control-Allow-Origin: https://example.com 據我了解,瀏覽器仍然會No 'Access-Control-Allow-Origin' header is present on the requested resource拋出No 'Access-Control-Allow-Origin' header is present on the requested resource無論標頭存在於其他來源還是標頭根本不存在(我認為不公開允許的域將是首選解決方案)。

另外,我確實知道可以通過將其添加到web.config來使標題始終顯示:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="https://example.com" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

但是我真的只是想知道什么是正確的實現。

該行為是設計使然:

如果響應不包含Access-Control-Allow-Origin標頭,則AJAX請求失敗。 具體來說,瀏覽器不允許該請求。 即使服務器返回成功的響應,瀏覽器也不會將響應提供給客戶端應用程序。

鏈接的文章在CORS的工作方式部分中包含完整的說明。

它還提供了瀏覽器發送預檢請求時的信息,以及如何在預檢請求中啟用標頭Access-Control-Request-Method和Access-Control-Request-Header

在Web API 2中啟用CORS

規范還告訴您,響應中可能包含帶有適當值的標頭,以允許訪問資源,但是如果資源對於客戶端不可用,則不必包含此標頭

HTTP對CORS請求的響應可以包括以下標頭:

Access-Control-Allow-Origin

指示是否可以通過返回Origin請求標頭的文字值(可以為null )或響應中的*來共享響應。

提取標准

編輯

W3 Recomendation更明確地講,不允許從其他來源訪問的資源不應包含Access-Control-Allow-Origin標頭

對於其他來源的應用程序無用的資源(例如登錄頁面),不應返回Access-Control-Allow-Origin標頭。 資源仍然必須保護自己免受CSRF攻擊,例如要求在顯式提供的請求內容中包含不可猜測的令牌。 此類資源的安全屬性不受符合此規范的用戶代理的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM