我正在尝试使用PHP在Google App Engine中创建Restful API页面,允许外部实体向其发送数据。我首先在Chrome扩展程序" Advanced Rest Client"接受数据并返回响应。然后我创建了以下html,所以我可以用Javascript测试它,
<html><head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
</head>
<body>
<span id="response"></span>
<script>
var url = "https://www.website.com/api/"
var data = { "test":"success", };
var response = function(data){ $("#response").html(data); };
$.post(url, data, response);
</script>
</body></html>
服务器设置为返回&#34;成功&#34;的PHP回应响应。或者&#34;失败&#34;。
我在Google App Engine中尝试了上述脚本,它没有问题,它接受了数据并返回了响应。
然后我在000webhost.com上创建了一个网页并在那里测试了代码,它接受了数据但没有回复。
然后我将代码发送给需要发送数据的人,当他们尝试发送数据时,它说他们是未经授权的,没有接受任何数据。
然后我尝试了以下网站https://resttesttest.com/,我的服务器接受数据,但是我没有返回响应,而是收到以下错误,
哦不! Javascript返回HTTP 0错误。这是一个常见原因 可能发生的是您从a请求了跨域资源 服务器中没有包含相应的CORS头 响应。
我尝试将以下内容添加到我的app.yaml中,但没有成功,
http_headers:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
有什么想法吗?
答案 0 :(得分:0)
以下是导致问题的原因,
http_headers:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Google App Engine不接受这些参数,因此我只在PHP中使用了以下行,
header( 'Access-Control-Allow-Origin: *' );
现在有效。
答案 1 :(得分:0)
在app.yaml中,http_headers
必须属于handlers
中的特定处理程序规范,而不是#34;独立的&#34;因为你似乎正在使用它。
文档中建议的示例是:
handlers:
- url: /images
static_dir: static/images
http_headers:
Access-Control-Allow-Origin: '*'
但当然您也可以将它应用于其他类型的处理程序,而不仅仅是示例中的静态服务。