为什么它被CORS策略阻止:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态。

时间:2019-11-08 16:59:33

标签: cors

我已按照以下指南进行操作:

https://serverless.com/blog/cors-api-gateway-survival-guide/

使用无服务器,lambda,nodejs创建后端服务。 如果使用邮递员进行测试,则端点正常工作。

在请求标头下方,如何设置它们(自发现问题以来,我尝试启用所有功能)。

General:
Request Method: OPTIONS
Status Code: 400 
Remote Address: xxx.xxx.xxx.xxx:443
Referrer Policy: no-referrer-when-downgrade

Response Headers:
access-control-allow-credentials: true
access-control-allow-headers: Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Access-Control-Allow-Origin, Access-Control-Allow-Credentials
access-control-allow-origin: *
content-length: 97
content-type: application/json
date: Fri, 08 Nov 2019 16:26:15 GMT
status: 400
via: 1.1 xxxxxxx.cloudfront.net (CloudFront)
x-amz-apigw-id: xxxxxxxx=
x-amz-cf-id: xxxxxx-EFTU2MF4k_TQ==
x-amz-cf-pop: xxxxx-C1
x-amzn-requestid: xxxxxxx-85a7-4d61-bf42-081944a4d307
x-amzn-trace-id: Root=1-xxxxxxx-37555e2ccf9ab35021c26f98;Sampled=0
x-cache: Error from cloudfront

Request headers
:authority: xxxxxx.execute-api.eu-west-1.amazonaws.com
:method: OPTIONS
:path: /stg/getConfigUrl
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,it;q=0.8
access-control-request-headers: access-control-allow-headers,access-control-allow-methods,access-control-allow-origin,content-type
access-control-request-method: POST
cache-control: no-cache
origin: http://0.0.0.0:8017
pragma: no-cache
referer: http://0.0.0.0:8017/
sec-fetch-mode: cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 ....

我认为所需的预检请求标头已设置。我没有得到这个错误。 “它没有HTTP正常状态”到底是什么意思?

尝试使用Postman(相同的请求),它会回答HTTP 200 OK。 但是在这里通过浏览器,似乎OPTION请求回答了400 ...为什么? 我该如何解决?

1 个答案:

答案 0 :(得分:-1)

基本上,您的浏览器在执行您访问的网站中编码的正确XHR请求之前,会询问“好,我在localhost(或web.com)中”,然后询问该请求指向的网站是“嘿,我必须给您打电话什么选项?”之后,如果网站配置正确,它可以回答例如“因此,我允许来自collsite.com的请求,但仅当您要GET或POST时,我才能允许您给我发送您想要的所有HTTP标头”和浏览器“好吧!我将检查此请求并为您执行这些规则!”然后,它将抛出或不抛出已知的“ CORS错误”。 从技术上讲,它首先会向网站请求指向一个带有动词“ OPTIONS”的空请求。 之后,它将“捕获”特定的HTTP标头并检查其内容,并在此进行“对话”。例如,允许域调用的“ Access-Control-Allow-Origin”或“ Access-Control-Allow-Methods”具有这些域可用于调用的允许方法,依此类推,这些标头和其他标头负责允许或不允许已知的“ CORS”。