API的Access-Control-Allow-Origin问题

时间:2016-11-09 21:21:26

标签: google-app-engine

我在PHP中编写了一个非常简单的API,并将其作为服务运行(https://protoapi-dot-rehash-148415.appspot.com/events/)。

当我尝试使用API​​中的JSON加载数据网格时,我得到了可怕的" No' Access-Control-Allow-Origin'标头出现在请求的资源上。"我想要使​​用JSON的页面上的错误。 (http://proto-angular-dot-rehash-148415.appspot.com/events.php

我尝试了几种不同的方法来添加Access-Control-Allow-Origin:" *"到app.yaml文件和生成API的PHP文件中的标题。我认为它不能在yaml中工作,因为你不能将http_headers应用于动态文件,并且由于压缩它在文件中不起作用。

除了将API和应用程序放在同一服务中之外,还有其他方法可以完成这项工作吗?我不喜欢这样做,因为我在使用mod_rewrite用于API,它可能会导致我的应用程序出现混乱。

非常感谢任何见解!

-Mike

1 个答案:

答案 0 :(得分:3)

除非您在事件API上添加服务器端,否则标题不会有任何好处。服务器决定了CORS权限。你可以整天发送消息或文件,顶部有正确的标题,它会忽略它们。 allow-origin标头必须来自服务器,以允许进行跨源资源共享(CORS)。

我建议在提供API或处理请求的函数中添加标头。你的事件API吐出了很多JSON。在JSON之前,让你的API吐出标题Access-Control-Allow-Origin: *,你应该全部设置。

作为完整性检查,您还可以尝试添加Access-Control-Allow-Headers: Content-Type并查看是否有帮助。根据您对Content-Type标头的评论,这可能是问题的一部分。应该以与另一个相同的方式添加;让你的API在事件JSON之前在它自己的行上发送它(放一个\n在字符串文字中创建一个新行。)