gpt4 book ai didi

angularjs - CORS 预检返回 200 但后续 PUT 永远不会发生(具有外部 REST API 的 Angular JS)

转载 作者:可可西里 更新时间:2023-11-01 16:30:26 25 4
gpt4 key购买 nike

我正在使用一个与 REST api 对话的 Angular 应用

我已经设置了访问控制,以便我的 GET 请求按预期工作。 (浏览器发送预检 OPTIONS 请求,然后触发后续的 GET)。

但是,我的 PUT 遇到了问题。

问题 是,使用 PUT 时,选项预检似乎可以正常返回,但 PUT 永远不会触发。

首先,我将展示什么是有效的,然后是什么是失败的。我正在使用 Charles 来监视通话。


获取(工作)

1) 预检请求

OPTIONS /v1/account HTTP/1.1
Host api.mysite.com
Access-Control-Request-Method GET
Origin http://127.0.0.1:9000
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36
Access-Control-Request-Headers accept, authorization
Accept */*
Referer http://127.0.0.1:9000/
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8

2) 飞行前响应

HTTP/1.1 200 OK
Server nginx/1.6.0
Date Wed, 21 May 2014 15:43:25 GMT
Content-Type application/octet-stream
Content-Length 0
Connection keep-alive
Access-Control-Allow-Origin *
Access-Control-Allow-Methods *
Access-Control-Allow-Headers Origin, X-Requested-With, Content-Type, Accept, Authorization, WWW-Authenticate, X-BLURR-DEBUG
Access-Control-Allow-Credentials true

3) GET 请求

GET /v1/account HTTP/1.1
Host api.mysite.com
Accept application/json, text/plain, */*
Origin http://127.0.0.1:9000
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36
AUTHORIZATION DFHD8D...
Referer http://127.0.0.1:9000/
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8

4) GET 响应

{ some json as expected }

PUT(不工作)

现在,这里是 PUT,它似乎返回了一个正常的预检响应,但从未到达 PUT 请求:

1) 预检请求

OPTIONS /v1/account HTTP/1.1
Host api.mysite.com
Access-Control-Request-Method PUT
Origin http://127.0.0.1:9000
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36
Access-Control-Request-Headers accept, authorization, content-type
Accept */*
Referer http://127.0.0.1:9000/
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8

2) 飞行前响应

HTTP/1.1 200 OK
Server nginx/1.6.0
Date Wed, 21 May 2014 15:51:41 GMT
Content-Type application/octet-stream
Content-Length 0
Connection keep-alive
Access-Control-Allow-Origin *
Access-Control-Allow-Methods *
Access-Control-Allow-Headers Origin, X-Requested-With, Content-Type, Accept, Authorization, WWW-Authenticate, X-BLURR-DEBUG
Access-Control-Allow-Credentials true

问题

PUT 的preflight 响应似乎没问题,所以我不确定为什么浏览器从不发送实际 PUT 请求。

任何帮助或指导都会很棒!谢谢

最佳答案

*(星号)不是 Access-Control-Allow-Methods header 的有效值。您需要列出实际方法(例如 GET、PUT)。看起来虽然服务器的预检响应成功,但浏览器可能仍在拒绝预检并且不发送实际请求。检查浏览器的控制台日志是否有任何错误。

关于angularjs - CORS 预检返回 200 但后续 PUT 永远不会发生(具有外部 REST API 的 Angular JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com