如何使用 Joomla 作为服务器配置跨域资源共享 (CORS)?

Posted

技术标签:

【中文标题】如何使用 Joomla 作为服务器配置跨域资源共享 (CORS)?【英文标题】:HowTo configure Cross Origin Resource Sharing (CORS) with Joomla as server? 【发布时间】:2013-03-22 16:54:48 【问题描述】:

我正在编写一个嵌入在Joomla 上运行的网站中的网络应用程序。在客户端,我使用的是 AngularJS。 Angular 的 $resource 对象遵循跨域资源共享的模式——即它在发出任何 GET 请求之前发出 OPTIONS 请求。

在 Joomla 中,我的一个控制器中有一个 task,它接收客户端的请求,在 Joomla 中执行一些身份验证逻辑,然后用数据进行响应。如果我提出一个简单的GET 请求,它会做出适当的响应。但是,我不知道如何让 Joomla 在收到OPTIONS 请求时给出适当的“OK”响应。

是否有一种特定于 Joomla 的方法来实现这一点? 如果没有,如何使用纯 php 回复 OPTIONS?我的搜索结果一片空白。

(如果有什么不同,这最终将是同源请求。在我们的开发过程中它只是跨域。但是,我相信Angular无论如何都会发出OPTIONS请求。)

【问题讨论】:

你为什么关心选项?我使用 $resource,但我觉得它不存在。 我可以解决它,但我正在努力做到正确并遵守规范。 【参考方案1】:

这是一个如何使 CORS 工作的示例:

假设你在这个页面 origin.com/test.php 并且你在这个页面上的 javascript 向 target.com 发出请求。

要发起跨域请求,浏览器会发送带有 Origin HTTP 标头的请求。此标头的值是为页面提供服务的域 (origin.com)。所以在这种情况下,它将是:

来源:http://origin.com

如果 target.com 支持 CORS,则需要在响应中使用 Access-Control-Allow-Origin HTTP 标头进行回复。标头的值表示允许哪些源站。

访问控制允许来源:http://origin.com

要允许来自所有域的访问,target.com 需要发送 HTTP 标头:

访问控制允许来源:*

欲了解更多信息:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

【讨论】:

我在网上找到的关于 CORS 的最简单解释:)

以上是关于如何使用 Joomla 作为服务器配置跨域资源共享 (CORS)?的主要内容,如果未能解决你的问题,请参考以下文章

跨域资源共享错误:预检响应不允许标头

跨域后cookie怎么不能传递到客户端的浏览器

如何添加跨域资源共享请求标头? [复制]

如何搞定前端资源服务跨域问题之nginx篇

Nginx作为静态资源web服务-跨站访问

Nginx作为静态资源web服务-跨站访问