从 http 网页请求本地资源时响应为 401 错误
Posted
技术标签:
【中文标题】从 http 网页请求本地资源时响应为 401 错误【英文标题】:Response is a 401 error when requesting local resource from http webpage 【发布时间】:2019-05-21 22:37:19 【问题描述】:Chrome 正在抛出
XMLHttpRequest 无法加载 http://127.0.0.1:8006/test 请求中不存在
'Access-Control-Allow-Origin'
标头 资源。 因此,Origin 'http://xxx.yyy.com' 不允许访问。 响应的 HTTP 状态代码为 401。
我正在使用 HTTP 打开一个弹出窗口并向 Java 创建的本地 HTTP 服务器发出请求。
它在所有机器上都可以正常工作,除了在某些不同的机器上,浏览器会抛出上述错误。
根据我的理解,在HTTP
到HTTP
出现这个错误有点奇怪。
【问题讨论】:
问题不在于缺少 Access-Control-Allow-Origin 标头。当响应是错误而不是成功消息时,这是预期的。实际问题是响应是 401 而不是 200 OK。而且响应是 401 的事实与服务器中的 CORS 配置完全没有关系。 【参考方案1】:一点也不奇怪——127.0.0.1:8006
和 xxx.yyy.com
是不同的来源,Java 服务器没有发送 Access-Control-Allow-Origin
标头来告诉浏览器没问题。
更多详情https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
基本上,Java 服务器需要添加带有允许的 CORS 来源或通配符(允许任何来源)的 Access-Control-Allow-Origin
标头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: http://xxx.yyy.com
(包括协议,因为http和https在浏览器眼里是不同的来源)
【讨论】:
Allow Origin 和 Allow Headers 都已经存在。如果没有,每台机器上都应该出现同样的问题。我尝试在同一台机器上向 Chrome Poster 请求相同的资源并且它正在工作。 allow-origin 标头中的值是什么?能否请您在 devtools 或该海报扩展程序中截取请求详细信息?【参考方案2】:您必须在调用该 URL 以实现 Web 服务的服务器端添加标头。 This 将帮助您了解标头是如何在 java 中添加的。
例如:
.header("Access-Control-Allow-Origin", "*")
如果您仍然想避免cross origin
错误。在这种情况下,我建议您将此扩展程序与 chrome 一起使用:Chrome extension for cors。
这将帮助您避免浏览器中的跨源错误,仅在您的机器中用于开发目的。
【讨论】:
Allow Origin 和 Allow Headers 都已经存在。如果没有,每台机器上都应该出现同样的问题。我尝试在同一台机器上向 Chrome Poster 请求相同的资源并且它正在工作。以上是关于从 http 网页请求本地资源时响应为 401 错误的主要内容,如果未能解决你的问题,请参考以下文章
http常见的状态码,400,401,403状态码 , http响应 ,php设置http响应
从 vuejs 客户端向 oauth/token 发送 POST 请求时的 401 响应
当服务器返回 401 响应时,请求的资源上不存在“Access-Control-Allow-Origin”标头
http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码