当前位置: 首页 > 知识库问答 >
问题:

访问控制允许源标题不工作-我做错了什么?

闻人宜
2023-03-14

我试图用一个访问控制Allow Origin标头来响应HTTP OPTIONS方法,复制请求中的Origin标头的内容。

这显然不起作用,原因我不明白。

tl;dr:OPTIONS的回应是:

Access-Control-Allow-Origin: http://10.0.0.105:9294

后续GET有:

Origin:http://10.0.0.105:9294

Chrome说:

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin

WTF不是吗?

更多细节。。。

通过查看Chrome的开发人员工具窗口,请求标头如下:

OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

响应标题为:

HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8

在jQuery发送其选项请求并获得上述响应后,发生了两件奇怪的事情。选项响应(200)在开发者控制台中显示为错误:

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK)

之后一个GET请求被拒绝。控制台错误:

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin.

我不明白为什么不。我做错了什么?

共有2个答案

南门展
2023-03-14

您应该添加访问控制允许方法头以及访问控制允许起源

对于通配符,请访问“添加以下标题”

   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

对于允许的任何特定来源,请将其添加到*。

姬昀
2023-03-14

好的,我想我明白了。似乎正确处理飞行前选项请求是必要的,但对于跨站点资源请求来说还不够。

在选项请求返回令人满意的标题后,对同一URL的任何后续请求的所有响应也必须具有必要的“Access Control Allow Origin”标题,否则浏览器将吞下它们,它们甚至不会显示在调试器窗口中。

因此,看起来浏览器取消了请求,因为OPTIONS响应中存在一些问题,但实际上,浏览器正在查看来自真实请求的响应标头,然后拒绝它们。

 类似资料:
  • 我有错误: XMLHttpRequest 无法加载 http://localhost:5984/cp_config/。当凭据标志为 true 时,不能在“访问控制-允许-源”标头中使用通配符“*”。因此,不允许访问源“http://localhost”。XMLHttpRequest 的凭据模式由 withCredentials 属性控制。 但我有一个标题: 我该如何解决这个问题?

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 如何解决以下错误; 加载资源失败:服务器响应状态为500(内部服务器错误)cdn。安普项目。org/v0。js:68响应必须包含AMP访问控制允许源代码源标题Yd@cdn。安普项目。org/v0。js:68 cdn。安普项目。org/v0。js:68表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头​​​ 报道 遵循CORS上AMP G

  • 我正在开发一个带有jhipster V4.5.6的Spring启动应用程序。但无法配置 CORS。 下面是我的application-dev.yml文件: WebConfigurer.java如下: 和安全配置。java文件如下所示: 现在,我可以使用 GET 请求。但是当我使用POST时,如下所示: 我得到以下错误: XMLHttpRequest 无法加载 http://localhost:80

  • 问题内容: 我正在使用以下脚本- 我尝试访问的计算机正在运行播放框架。我收到以下错误: 选项404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我已经难过了两天,有人可以帮我吗? 提前谢谢 问题答案: 问题是您正在尝试进行跨域调用(从到)。Same Origin Policy 不允许这样做,因此浏览器试图使用跨域资源

  • 问题内容: Web编程有些新知识,对此有些困惑。我有一个提供网站的基本express.js web服务器。我想将一个Gameid交给一个函数,并让其使用其Web API从Steam抓取成就信息,应该使用以下REST API调用来支持该信息: https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPerc