2016-11-09 68 views
1

我写了一个非常简单的API在PHP中,并运行它作为服务(https://protoapi-dot-rehash-148415.appspot.com/events/)。访问控制允许来源问题与API

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

我已经尝试了几种不同的方法来向app.yaml文件和生成API的PHP文件中的标头添加Access-Control-Allow-Origin:“*”。我认为它在yaml中不起作用,因为您无法将http_headers应用于动态文件,并且由于压缩而无法在文件中运行。

有没有其他方法可以使这项工作,API和应用程序在同一服务?我讨厌这样做,因为我使用的是mod_rewrite,它可能会导致我的应用程序出现混乱。

任何见解将不胜感激!除非你将其添加服务器端,对事件的API

-Mike

回答

2

头将没有任何好处。服务器是什么决定CORS权限。您可以使用顶部的正确标题整天发送消息或文件,并且会忽略它们。允许源头部必须来自服务器以允许跨源资源共享(CORS)发生。

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

作为一个健全检查,你也可以尝试加入Access-Control-Allow-Headers: Content-Type,看看是否有帮助。根据您对Content-Type标题的评论,这可能是问题的一部分。它应该像另一个一样添加;让你的API在你的事件之前发送JSON在它自己的行上(把一个\n在字符串文字里面新建一行)。

+0

Hey Tim。我实际上正在放置'header(“Access-Control-Allow-Origin:*”);'在events API中。我在Postman中加载了该文件,看起来Google Apps引擎正在剥离HTTP标头......它没有为我放置的JSON创建内容类型标头,而是替换为GZIP的内容类型标头。看起来像某种资源压缩正在发生。我必须跟进GAE团队。感谢您的反馈意见! – Mike

+0

你还有一个Access-Control-Allow-Headers标头吗?我总是必须在我的所有Web服务上明确允许Content-Type标头,否则它们会自动被剥离,如您所说。 – Tim

+0

从来没有听说过。请告诉我更多。我只在GAE的Java应用程序中见过它。 – Mike