[英]CORS using IIS with ARR and URL Rewrite as a reverse proxy
我使用带有 ARR 和 URL 重写的 IIS 作为反向代理,以支持到 ElasticSearch 服务器的 HTTPS 连接。 ES 配置正确,据我所知,直接 HTTP 连接到 ES 不会导致错误。
但是,当我通过代理连接时,我在浏览器中收到此错误:
跨域请求被阻止:同源策略不允许读取https://myserver:19201/myindex/_search 上的远程资源。 (原因:CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“授权”)
elasticsearch.yml 文件中的相关部分是这样的:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: ["X-Requested-With","X-Auth-Token","Content-Type","Content-Length","Authorization","engine-name"]
http.cors.allow-credentials: true
我需要做一些特别的事情来通过代理启用这些请求,还是这是一个傻瓜的差事,我应该寻找另一种选择?
您可以自己在 web.config 下编写标题,如您在此答案中所见。
但最好使用官方模块: IIS CORS 模块。
在你的情况下,你需要这个配置:
<cors enabled="true">
<add origin="THE_URL_YOU_USE_IN_YOUR_BROWSER" allowCredentials="true">
<allowHeaders allowAllRequestedHeaders="true">
<add header="X-Requested-With" />
<add header="X-Auth-Token" />
<add header="Content-Type" />
<add header="Content-Length" />
<add header="Authorization" />
<add header="engine-name" />
</allowHeaders>
<allowMethods>
<add method="GET" />
<add method="OPTIONS" />
<add method="POST" />
<add method="DELETE" />
<add method="PUT" />
<add method="HEAD" />
</allowMethods>
</add>
</cors>
因此,您应该能够使其工作的一种方法是将 CORS 设置为允许所有来源:
Access-Control-Allow-Origin: *
您可以在 IIS 中的 HTTP 响应标头下进行设置。
然而,这首先违背了使用 CORS 的目的,从安全角度来看可能不推荐。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.