我试图在我部署的用于检索JSON数据的Azure函数上创建一个POST。我得到一个CORS错误。
从源站获取“{API URL}”的访问权限http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源。
我的前端使用javascript发送POST请求:
const data = { name: "jennifer" };
const response = fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': "http://localhost:3000",
'Origin': 'http://localhost:3000'
}
})
我的后端通过以下方式处理CORS飞行前:
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
headers = {
"Access-Control-Allow-Origin" : "http://localhost:3000",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Allow-Methods" : "GET, POST, OPTIONS",
"Access-Control-Allow-Headers" : "Origin, Content-Type, Accept"}
#handle CORS preflight
if req.method == "OPTIONS":
return func.HttpResponse(headers=headers)
我是不是把起飞前的事处理错了?
我通过从消费计划迁移到应用服务计划来“解决”这个问题。这使我能够用它们奇特的UI配置CORS。
@AnthonyChu建议
如果要继续使用Azure Functions的使用计划,可以在函数应用前面使用Azure API管理使用层来添加CORS策略。"