【问题标题】:How to enable CORS for Catalyst如何为 Catalyst 启用 CORS
【发布时间】:2019-06-28 23:58:31
【问题描述】:

拥有一个生成 JSON 的 Perl Catalyst 应用程序,我需要在一个由 Apache 服务器提供服务的 HTML 页面中使用 jQuery 读取该 JSON 内容。 Catalyst 和 Apache 这两个应用程序都在同一主机上运行。

当我从 Apache 访问 Catalyst URL 时出现错误

Access to XMLHttpRequest at 'http://localhost:3000/abc/json_list' from origin 'http://localhost:8888' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

由于我在许多主题中都红了,因此必须设置一个(或更多)标题。在这种情况下,必须设置催化剂,但我不知道如何设置。

有什么提示吗?

【问题讨论】:

  • 您没有显示任何相关代码。请edit您的帖子显示生成响应的相关代码。您可以通过调用Catalyst::Response->header(...) 方法在Catalyst 应用程序中设置标题,这就是我要开始的地方。
  • 因此,要使应用程序被视为同源,两个应用程序在同一台服务器上运行是不够的。这两个应用程序还必须使用完全相同的主机名、相同的端口号和相同的协议(均为 http 或均为 https)提供服务。否则,如果任何请求是由您在 Apache 服务器上运行的前端 JavaScript 代码向 Perl Catalyst 服务器发出的,浏览器会将其视为跨域请求。这就是为什么您需要启用 CORS 的 Perl Catalyst 服务器。为此,请参阅lists.scsys.co.uk/pipermail/catalyst/2018-June/…

标签: apache perl cors catalyst


【解决方案1】:

Catalyst 允许您使用 the header method on the response object 设置响应标头。

$c->res->header( "Access-Control-Allow-Origin" => "http://localhost:8888" );

如果您有多个端点需要通过 CORS 提供权限,请考虑使用控制器的 sub autousing 现有的 middleware

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 2015-08-13
    • 2020-12-27
    • 2015-07-22
    • 2020-06-15
    • 2014-08-28
    • 2021-06-24
    相关资源
    最近更新 更多