繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM