Asp.net
具有多個域的訪問控制允許來源
access-control-allow-origin在我的 web.config 中,我想為指令指定多個域。我不想使用*. 我試過這種語法:<add name="Access-Control-Allow-Origin" value="http://localhost:1506, http://localhost:1502" />這個
<add name="Access-Control-Allow-Origin" value="http://localhost:1506 http://localhost:1502" />這個
<add name="Access-Control-Allow-Origin" value="http://localhost:1506; http://localhost:1502" />和這個
<add name="Access-Control-Allow-Origin" value="http://localhost:1506" /> <add name="Access-Control-Allow-Origin" value="http://localhost:1502" />但它們都不起作用。什麼是正確的語法?
只能有一個
Access-Control-Allow-Origin響應標頭,並且該標頭只能有一個原始值。因此,為了讓它工作,你需要一些程式碼:
- 獲取
Origin請求標頭。- 檢查原始值是否是列入白名單的值之一。
- 如果有效,則
Access-Control-Allow-Origin使用該值設置標頭。我認為沒有任何方法可以僅通過 web.config 執行此操作。
if (ValidateRequest()) { Response.Headers.Remove("Access-Control-Allow-Origin"); Response.AddHeader("Access-Control-Allow-Origin", Request.UrlReferrer.GetLeftPart(UriPartial.Authority)); Response.Headers.Remove("Access-Control-Allow-Credentials"); Response.AddHeader("Access-Control-Allow-Credentials", "true"); Response.Headers.Remove("Access-Control-Allow-Methods"); Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); }
對於 IIS 7.5+ 和 Rewrite 2.0,您可以使用:
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" /> </customHeaders> </httpProtocol> <rewrite> <outboundRules> <clear /> <rule name="AddCrossDomainHeader"> <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> <add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?domain1\.com|(.+\.)?domain2\.com|(.+\.)?domain3\.com))" /> </conditions> <action type="Rewrite" value="{C:0}" /> </rule> </outboundRules> </rewrite> </system.webServer>解釋伺服器變數**
RESPONSE_Access_Control_Allow_Origin**部分:在 Rewrite 中,您可以在之後使用任何字元串
RESPONSE_,它將使用單詞的其餘部分作為標題名稱(在本例中為 Access-Control-Allow-Origin)創建響應標題。重寫使用下劃線“_”而不是破折號“-”(重寫將它們轉換為破折號)解釋伺服器變數**
HTTP_ORIGIN**:類似地,在 Rewrite 中,您可以使用任何請求標頭
HTTP_作為前綴。破折號的規則相同(使用下劃線“_”而不是破折號“-”)。