gpt4 book ai didi

javascript - 为什么发送多个 OPTIONS 请求,即使 Access-Control-Allow-Origin 设置为 *?

转载 作者:搜寻专家 更新时间:2023-11-01 04:25:13 26 4
gpt4 key购买 nike

我已经构建了一个 API (api.example.com) 并希望可以从 www.example.com 访问它
我还希望它可以从其他域访问。

为此我添加了 Access-Control-Allow-Origin: *

但是当我打开 www.example.com 时,会在所有 api 请求之前发送预检请求(OPTIONS 请求)
如何停止多个预检请求?我认为应该只有一个预检请求,我做错了什么!!! ? 或者浏览器必须在每次调用之前发送预检请求是很自然的吗?
注意:我不想使用 JSONP,因为我要让它公开访问 Access-Control-Allow-Origin: *

OPTIONS 调用头

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, authorization
Access-Control-Request-Method:GET
AlexaToolbar-ALX_NS_PH:AlexaToolbar/alxg-3.2
Connection:keep-alive
Host:api.touchtalent.biz
Origin:http://www.example.com
Referer:http://www.example.com/artist/52894/pratim-relekar
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

OPTIONS 调用响应

Access-Control-Allow-Headers:origin, x-requested-with, content-type, Authorization
Access-Control-Allow-Methods:PUT, GET, POST, DELETE
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:163
Content-Type:text/html
Date:Fri, 13 Jun 2014 14:24:55 GMT
Keep-Alive:timeout=5, max=98
Server:Apache/2.2.22 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:PHP/5.4.6-1ubuntu1.8

GET请求请求头

Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
AlexaToolbar-ALX_NS_PH:AlexaToolbar/alxg-3.2
Authorization:Bearer VtQJqaTGd7YFb8Mee6GfiLwiRrUdt2iCp9ITuiUE
Connection:keep-alive
Host:api.touchtalent.biz
Origin:http://www.example.com
Referer:http://www.example.com/artist/52894/pratim-relekar
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

获取请求响应头

Access-Control-Allow-Headers:origin, x-requested-with, content-type, Authorization
Access-Control-Allow-Methods:PUT, GET, POST, DELETE
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:1116
Content-Type:application/json
Date:Fri, 13 Jun 2014 14:24:55 GMT
Keep-Alive:timeout=5, max=97
Server:Apache/2.2.22 (Ubuntu)
Status:200
X-Powered-By:PHP/5.4.6-1ubuntu1.8

尽管我不想提供 URL,因为它会随着开发的进行而中断。但如果它可能有帮助:http://www.touchtalent.biz/home

更新 1:
一旦我删除了 Authorization:Bearer VtQJqaTGd7YFb8Mee6GfiLwiRrUdt2iCp9ITuiUE header ,它就停止发出多个预检请求。
但是删除这个 header 会破坏 oauth 的实现。我仍然必须在不删除自定义 header 的情况下防止多个预检请求。我该怎么做 ?
更新 2:
添加 Access-Control-Max-Age 有帮助,现在它不会为相同的请求发送预检。但是对于不同的请求(不同的 url),它会发送多个 OPTIONS 请求。

最佳答案

您可以尝试添加一个 header ,如 Access-Control-Max-Age 以尽量减少重复的 OPTIONS 请求。这将告诉浏览器缓存飞行前信息。参见 http://www.w3.org/TR/2008/WD-access-control-20080912/#access-control-max-age

关于javascript - 为什么发送多个 OPTIONS 请求,即使 Access-Control-Allow-Origin 设置为 *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208250/

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