SignalR的問題
之前在做SignalR的時候,需要對不同的子網域做API的呼叫,JS是在 signalr.domain.com ,需要呼叫的是在 o.domain.com 開始使用連線時,會引發CORS問題,如下圖:
錯誤

SignalR在做options時,會用 https://signalr.domain.com/negotiate?negotiateVersion=1 這樣的路徑做預檢,不過查了老半天都是回404,檢查原因有可能如下:
WebConfig是否被移除options請求的處理
<system.webServer>
<handlers>
<remove name="OPTIONSVerbHandler" />
</handlers>
</system.webServer>
檢查IIS是否安裝了 UrlScan的東西,若安裝了請檢查AllowVerbs中是否包含了options
UrlScan的配置文件為UrlScan.ini (C:\Windows\System32\inetsrv\urlscan\UrlScan.ini) 將OPTIONS從[DenyVerbs]中移除並添加到[AllowVerbs]下


在站臺的webconfig中的Allow-Method中是否加上options
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET" />
<add name="Access-Control-Allow-Headers" value="x-requested-with,aspxauth" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
參考資料:
IIS下网站对options请求直接返回404 - 傅小灰 - 博客园
什么是options请求 options请求为发送非简单跨域请求前的预检请求,若该请求未正常返回,浏览器会阻止后续的请求发送。 一般情况下,有三种方式会导致浏览器发起预检请求 1.请求的方法不是GET/HEAD/POST 2.POST请求的Content Type并非application/x ww
[Day 27] Cross-Origin Resource Sharing (CORS) - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
概覽 考量到安全問題,瀏覽器會以同源政策(Same-origin policy) 限制網頁對其他 Origin 的資源(Resource)存取,例如 AJAX、DOM、Cookie、圖片等等,然而透過…
