SignalR 跨子網域呼叫
之前使用 SignalR 時,JavaScript 放在 signalr.domain.com,API 則位於 o.domain.com。開始連線後出現 CORS 問題,如下圖。
錯誤畫面

SignalR 會向 https://signalr.domain.com/negotiate?negotiateVersion=1 發送 OPTIONS 預檢請求,但伺服器一直回傳 404。我整理了三個可能原因。
Web.config 是否移除了 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]。


站臺 Web.config 的 Access-Control-Allow-Methods 是否包含 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、圖片等等,然而透過…


