我们最近将API应用程序从Azure云服务迁移到Azure网站,并且一些客户端仍在使用我们的旧协议进行身份验证,该协议使用cookie(而不是通常的Authorization: Bearer
HTTP标头)。我们需要支持此身份验证协议一段时间,因为客户端将无法立即迁移。
为了在指向API的跨域ajax请求中支持cookie,客户端需要在XMLHttpRequest
中将withCredentials
设置设置为true
,服务器需要对Access-Control-Allow- Credentials
标头以及任何CORS请求进行响应。
我们面临的问题是,Azure网站完全自己管理CORS,并使用其自己的配置(仅限于允许的来源列表)进行响应,这不允许设置此标头…从而破坏了我们所有Ajax客户的应用程序!
有没有办法(在响应中)临时添加此标头?
我们终于设法了解了Azure Apps
CORS中间件的行为。要禁用它,您必须清除Web应用程序的CORS刀片中的每个允许的原始条目(包括*
)。然后,您可以使用Web Api
2功能或使用web.config自己管理CORS。
该信息甚至可以在文档中找到:
不要在一个API应用程序中同时使用Web API CORS和App Service CORS。App Service CORS优先,Web API
CORS无效。例如,如果在App Service中启用一个原始域,并在Web API代码中启用所有原始域,则您的Azure
API应用将仅接受来自您在Azure中指定的域的调用。
因此,最终的答案是:如果您的应用程序不需要非常特定的CORS管理,则可以使用Azure App Service
CORS。否则,您将需要自己处理它并禁用Web应用程序中的所有CORS配置。
Access-Control-Allow-Credentials响应报头指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露。 凭证是 Cookie ,授权标头或 TLS 客户端证书。 当作为对预检请求的响应的一部分使用时,它指示是否可以使用凭证进行实际请求。请注意,简单的GET请求不是预检的,所以如果请求使用凭证的资源,如果此资源不与资源一起返回,浏览器将忽略该响应,并且不会返回
问题内容: 我正在使用节点,在客户端上在后端和angular4上表达,这给了我以下错误: XMLHttpRequest无法加载http:// localhost:4876 / login / check 。对预检请求的响应未通过访问控制检查:响应中的“ Access- Control-Allow-Credentials”标头的值为“”,当请求的凭据模式为“ include”时,该值必须为“ tru
我在后端使用node、express,在客户端使用angular4,这给了我以下错误: XMLHttpRequest无法加载http://localhost:4876/login/check。对预飞行请求的响应未通过访问控制检查:响应中“access-control-allow-credentials”标头的值为“”,当请求的凭据模式为“include”时,该值必须为“true”。因此,不允许访问
问题内容: 我陷入了API网关问题,并且在AWS论坛上浏览了所有其他SO解答,并通过了他们的文档,但仍然不满意。 我正在尝试使用AWS API网关设置API,该API调用Lambda函数,该函数读取/写入DynamoDB中的表。 DynamoDB的Lambda函数正在运行。我已经在AWS中创建了一个API,并为其创建了GET和OPTIONS方法。我读到AWS并没有仅对GET / POST强制执行O
问题内容: 我正在尝试使用发布请求将文件发送到服务器,但是在发送请求时会导致错误: Access-Control-Allow-Headers不允许请求标头字段Content-Type。 所以我搜索了错误并添加了标题: 然后我得到错误: Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin 所以我用谷歌搜索,唯一能找到的类似
我正在尝试将文件发送到我的服务器,并发送post请求,但当它发送时会导致错误: Access-Control-Allow-Headers不允许请求标头字段Content-Type。 所以我搜索了这个错误并添加了标题: 然后我得到错误: