CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理
Posted
技术标签:
【中文标题】CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理【英文标题】:CORS using IIS with ARR and URL Rewrite as a reverse proxy 【发布时间】:2016-08-27 18:29:48 【问题描述】:我使用带有 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
为了通过代理启用这些请求,我需要做些什么特别的事情,或者这是一个愚蠢的差事,我应该寻找其他选择?
【问题讨论】:
【参考方案1】:您可以在this 答案中看到的web.config 下自己编写标题。
但最好使用官方模块:IIS CORS module。
在你的情况下,你需要这个配置:
<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>
【讨论】:
【参考方案2】:因此,您应该使其工作的一种方法是设置 CORS 以允许所有来源:
Access-Control-Allow-Origin: *
您可以在 IIS 中的 HTTP 响应标头下进行设置。
但是,这首先违背了使用 CORS 的目的,从安全角度来看可能不建议这样做。
【讨论】:
以上是关于CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理的主要内容,如果未能解决你的问题,请参考以下文章
couchapp:对带有和不带有正斜杠的 URL 进行不同的重写
使用带有 JSONP 的 AJAX 未捕获的 SyntaxError 和 CORS 错误