1

所以我有一个应用程序,forums.awake-gaming.com并且有一个页面,通过 ajax可以在该页awake-gaming.com 面上POST使用表单。forums.awake-gaming.com

正如预期的那样,我得到了一个

XMLHttpRequest cannot load http://forums.awake-gaming.com/posts. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://awake-gaming.com' is therefore not allowed access.

因此,由于我可以访问服务器,因此我将其添加到discourse.conf目录下的文件中nginx/conf.d

add_header Access-Control-Allow-Origin  "http://awake-gaming.com/join-us.html";
add_header Access-Control-Allow-Methods: "GET, PUT, POST, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers: "Content-Type, Authorization, X-Requested-With";

我重新启动了 nginx 并尝试再次提交表单,理论上,这应该可以工作,但我仍然在控制台中遇到相同的错误:

ajax 调用也没有返回成功。但奇怪的是,数据被发布到forums.awake-gaming.com并被发布(通过话语 api)。

那我是不是错了?,我试图在 meta.discourse.org 上提问,但他们说这是 nginx 的问题,而不是话语的问题。在文件中添加标题.conf就足够了吗?或者我也需要用rails做点什么?

4

1 回答 1

2

我认为您只需要指定“ http://awake-gaming.com”,而不是“ http://awake-gaming.com/join-us.html”作为Access-Control-Allow-Origin值,如错误消息所述。实际上,如果您使用的是 Chrome,它会告诉类似“'Access-Control-Allow-Origin' 白名单仅 ' http://awake-gaming.com/join-us.html'。Origin ' http://awake-gaming.com'不在列表中,因此不允许访问。”

Access-Control-Allow-Methods附带说明一下, and之后有多余的冒号Access-Control-Allow-Headers,你最好删除它们,但我不认为它们是这里的罪魁祸首。

于 2014-01-31T18:08:23.373 回答