好的,
我找到了解决上述问题的方法。问题是使用 CORS 在服务器端配置错误。在记录的请求(见http://i.stack.imgur.com/F228l.png)中,Chrome 发送一个“预检请求”(HTTP 请求有方法 OPTIONS)。
与简单的请求(上面讨论过)不同,“预检”请求首先通过 OPTIONS 方法向另一个域上的资源发送 HTTP 请求,以确定实际请求是否可以安全发送。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests
我没有验证服务器上的 HTTP 属性“方法”,所以我的 BasicAuth 模块为每个传入的 HTTP 请求启动了授权过程,但在执行第一个请求(“预检请求”)时立即失败,因为没有设置授权标头.
在修改了 HTTP 方法的验证之后,一切照样工作。
我还得调整 web.conf
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="BasicAuthModule" type="NutritionDataService.Auth.BasicAuthModule"/>
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Max-Age" value="3600" />
<add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Accept, MaxDataServiceVersion, Authorization, Access-Control-Allow-Origin, DataServiceVersion" />
<add name="Access-Control-Allow-Methods" value="PUT, POST, GET, DELETE, MERGE, OPTIONS" />
</customHeaders>
</httpProtocol>
Access-Control-Allow-Headers 必须获取每个请求的标头,否则您将收到 501 响应。 (在上面的屏幕截图中是'accept, maxdataserviceversion.dataserviceversion, authorization')