使用带有ARR和URL重写的IIS作为反向代理的CORS

时间:2016-05-02 21:13:05

标签: http iis proxy cors

我使用带有ARR和URL重写的IIS作为反向代理,以支持与ElasticSearch服务器的HTTPS连接。据我所知,ES已正确配置,并且与ES的直接HTTP连接不会导致错误。

但是,当我通过代理连接时,我在浏览器中收到此错误:

  

阻止跨源请求:同源策略禁止读取   https://myserver:19201/myindex/_search处的远程资源。 (原因:   遗失令牌'授权'在CORS标题中   '接入控制允许集管'来自CORS预检频道)

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

我需要做些什么特别的事情才能通过代理启用这些请求,或者这是一个傻瓜的差事,我应该寻找另一种选择吗?

2 个答案:

答案 0 :(得分:0)

您可以在 web.config 下自己编写标题,如您在 this 答案中看到的那样。

但最好使用官方模块: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>

答案 1 :(得分:-1)

因此,应该使其工作的一种方法是将CORS设置为允许所有来源:

Access-Control-Allow-Origin: *

您可以在IIS的HTTP响应标题下进行设置。

但是,这首先违反了使用CORS的目的,并且从安全角度考虑,不建议这样做。