【问题标题】:Using a regular expression with CORS使用带有 CORS 的正则表达式
【发布时间】:2013-08-28 15:50:42
【问题描述】:

我正在尝试使用带有 cors 的正则表达式。我已经读过很多次了,这不可能是 cors 是所有 (*) 或确切的域。 Access-Control-Allow-Origin wildcard subdomains, ports and protocols 。然而,这似乎与 :http://www.cameronstokes.com/2010/12/26/cross-origin-resource-sharing-and-apache-httpd/ 相矛盾。有人可以澄清一下,如果可以使用正则表达式,请提供一个简单的例子,因为我试图实现上面的链接但没有成功。

希望使用的正则表达式是

    ^http\://\blocal-.*\b\.testing-test:10005$

我检查了我的正则表达式,它与生成的 URL 匹配。 我已按照 apache2.conf 的建议添加了 SetEnvIF 和 Header 设置行(这是正确的吗?),如下所示

    SetEnvIf Origin "^http\://\blocal-.*\b\.mycompany-it:10005$" 

    AccessControlAllowOrigin=$0 Header add Access-Control-Allow-Origin %

    {AccessControlAllowOrigin}e env=AccessControlAllowOrigin

我不知道下一步该做什么。它不起作用 提前致谢

【问题讨论】:

  • 您不能在 Access-Control-Allow-Origin 中包含正则表达式。所有这些都包含在您链接到的问题中。您当然可以编写自己的代码以编程方式生成 Access-Control-Allow-Origin 标头,如您链接到的文章中所述。如果您需要帮助来实现这一点,请向我们展示您为实现本文中描述的逻辑所做的一些尝试,以及它们失败的原因/方式。

标签: regex apache cors


【解决方案1】:

Access-Control-Allow-Origin 标头只能是通配符 '*' 或确切的 url。一种方法是首先从请求中获取 Origin 标头的值(这因服务器而异,但一个示例可能类似于:request.headers['Origin'])。

然后对请求 Origin 的值进行正则表达式检查。如果请求的来源通过了允许的正则表达式的检查,那么您可以简单地将 Access-Control-Allow-Origin 的值设置为请求的 Origin 的值(示例:response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'])。这样,既不违反严格的 url 访问控制规则,又允许服务器接受多个不同的允许来源。

【讨论】:

  • 看起来你正在为 NodeJS 上的 ExpressJS 编写 JavaScript。问题是询问 Apache 配置指令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2016-05-19
  • 2017-11-14
相关资源
最近更新 更多