我在 Stack Overflow 上看了其他相关的问题,但这个似乎有所不同。 实际上,我的问题与这个非常相似,只是我没有400状态的问题。
设定如下:
- 通过API Gateway进行Lambda函数调用
- 授权:无需API密钥,API KEY Required: false
部署到阶段:test
1个资源,1个POST方法集成Lambda。
- 直接调用POST端点(例如使用curl)始终返回200(带有效负载或无效负载等),这与参考问题不同。
我已经使用了“启用CORS”选项 - 我尝试将此选项应用于资源和POST请求(然后部署API)。
在API GW中,我可以看到 Access-Control-Allow-Origin
在 POST 方法 - Method Response 区域的 200 响应标头下列出。
结果:在 Chrome 的客户端代码中调用端点时,OPTIONS可以通过,但POST因缺少 Access-Control-Allow-Origin
标头而失败。
在 curl 中:OPTIONS 调用
curl -X OPTIONS -H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type" \
-H "Origin: http://example.com" --verbose <endpoint>
响应是:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
< Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
< Access-Control-Allow-Methods: POST,OPTIONS
< Access-Control-Allow-Origin: *
...
但使用POST:
curl -X POST -d '{}' -H "Content-Type: application/json" \
-H "Origin: http://example.com" --verbose <endpoint>
它返回:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
以及响应的 JSON 主体 - 但没有任何 Access-
任何头部信息。
我还能检查什么?