我在Javascript控制台上看到以下错误:
VM31:1 XMLHttpRequest cannot load '<some-url>'. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '<my-url>' is therefore not allowed access.
如何在Google App Engine(Python)中启用跨域资源共享,以访问其他网站?
我在Javascript控制台上看到以下错误:
VM31:1 XMLHttpRequest cannot load '<some-url>'. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '<my-url>' is therefore not allowed access.
如何在Google App Engine(Python)中启用跨域资源共享,以访问其他网站?
对于一个 Python 脚本,您可以在其他 self.response.header 行附近添加以下行。
self.response.headers['Access-Control-Allow-Origin'] = '*'
这对我有用。 这个想法来自于另一个答案的笔记中列出的 php 问题。
response = flask.jsonify({'status': 'UP!'})
和response.headers.add('Access-Control-Allow-Origin', '*')
也需要翻译。 - howMuchCheeseIsTooMuchCheese你需要在你的yaml配置中使用Access-Control-Allow-Origin
http头
handlers:
- url: /
...
http_headers:
Access-Control-Allow-Origin: http://my-url
在文档中查找更多有关CORS支持的信息
http_headers
)被脚本处理程序有意禁止。以下是 PHP 的解决方法:https://github.com/riannucci/rietveldv2/issues/27 - Tom Russell如果您想了解如何在Springboot中允许所有来源的AppEngine实例,可以按照以下步骤操作:
@CrossOrigin(origins = "*")
注释来标注@RestController
类@GetMapping、@PostMapping等
注释的特定资源方法。无需设置app.yaml中的任何处理程序。实际上,根据文档中的说明更改app.yaml文件时它不起作用。
...
...
...
@SpringBootApplication
@RestController
@CrossOrigin(origins = "*") // <--- here
public class SpringbootApplication {
...
...
@GetMapping("/")
@CrossOrigin(origins = "*"). // <--- or here
public String hello() {
.....
}
}
如果您想提供脚本服务,不幸的是,您不能使用Jeffrey Godwyll的答案。文档中,在http_headers
的第二句话中有一些hidden说明:"如果您需要在脚本处理程序中设置HTTP标头,则应在应用程序代码中执行此操作。"
另一个可能性是允许您的应用程序通过“过早”返回标头来处理预检请求。注意:如果您正在构建POST端点,请确保它在除所需请求方法之外的所有内容上返回允许跨站点请求标头。有时也可能会有预检GET(出于某种奇怪的原因):
from flask import Flask, request
HEADERS = {
"Access-Control-Allow-Origin": "*",
}
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def main():
if request.method != "POST":
return ("", 204, HEADERS)
return "After the POST"
如果您正在构建仅限 GET 的应用程序,则可以编写 if request.method == "OPTIONS":...
,就像 Cloud Functions documentation 中所述。