使用 Google Chrome 的 xmlHttpRequest 时拒绝设置不安全的标头“Origin”
Posted
技术标签:
【中文标题】使用 Google Chrome 的 xmlHttpRequest 时拒绝设置不安全的标头“Origin”【英文标题】:Refused to set unsafe header "Origin" when using xmlHttpRequest of Google Chrome 【发布时间】:2012-06-26 07:37:19 【问题描述】:收到此错误消息:
Refused to set unsafe header "Origin"
使用此代码:
function getResponse()
document.getElementById("_receivedMsgLabel").innerhtml += "getResponse() called.<br/>";
if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
receiveReq.open("GET", "http://L45723:1802", true, "server", "server123"); //must use L45723:1802 at work.
receiveReq.onreadystatechange = handleReceiveMessage;
receiveReq.setRequestHeader("Origin", "http://localhost/");
receiveReq.setRequestHeader("Access-Control-Request-Origin", "http://localhost");
receiveReq.timeout = 0;
var currentDate = new Date();
var sendMessage = JSON.stringify(
SendTimestamp: currentDate,
Message: "Message 1",
Browser: navigator.appName
);
receiveReq.send(sendMessage);
我做错了什么?为了使这个 CORS 请求正常工作,我在标头中遗漏了什么?
我尝试删除receiveReq.setRequestHeader("Origin", ...)
调用,但随后谷歌浏览器在我的receiveReq.open()
调用中引发访问错误...
为什么?
【问题讨论】:
【参考方案1】:在 CORS 中,调用代码不需要做任何特殊配置。一切都应该由浏览器处理。决定是否允许请求是服务器的工作。因此,每当您发出违反 SOP 政策的请求时,浏览器都会尝试为您发出 CORS 请求(它会自动添加 Origin 标头,如果您使用一些不安全的标头/方法/内容类型,可能会发出预检请求)。如果服务器支持 CORS,它将正确响应并通过提供 CORS 特定的响应标头来允许/禁止请求,例如
Access-Control-Allow-Origin: *
请记住,Chrome 对“localhost”主机名的限制非常严格。 (至少是在我使用它的时候)。而是使用您的计算机名称或在“主机”文件中为其分配另一个别名。因此,例如,不要像这样访问您的网站:
http://localhost:port/myappname
改为使用:
http://mymachinename:port/myappname
或
http://mymachinealias:port/myappname
更多详情请查看specification。
【讨论】:
【参考方案2】:你是在跨域工作吗?
试试 Brian S 解决方案或试试这个:
而不是设置为 localhost 只是传递任何东西......看看会发生什么。
receiveReq.setRequestHeader("Origin", "*");
【讨论】:
拒绝设置不安全的标头“Origin”【参考方案3】:这只是一个猜测,因为我使用 jquery 处理 ajax 请求,包括 CORS。
我认为浏览器应该设置标题,而不是你。如果您能够设置标题,那将破坏安全功能的目的。
在不设置这些标头的情况下尝试请求,看看浏览器是否为您设置了它们。
【讨论】:
是的:只需删除设置请求标头“Origin”的代码 - 对我来说非常有用!以上是关于使用 Google Chrome 的 xmlHttpRequest 时拒绝设置不安全的标头“Origin”的主要内容,如果未能解决你的问题,请参考以下文章
解决ubuntu无法使用root用户启动Google Chrome浏览器
在 React 中使用 Firebase 进行 Google 登录以进行 chrome 扩展
使用“返回”按钮时,Google 协作平台小工具在 Chrome 上消失