Chrome 扩展:如何更改 AJAX 请求标头中的来源?
Posted
技术标签:
【中文标题】Chrome 扩展:如何更改 AJAX 请求标头中的来源?【英文标题】:Chrome Extension: how to change origin in AJAX request header? 【发布时间】:2014-01-18 19:40:16 【问题描述】:我正在尝试在 ajax 请求标头中手动设置来源。在我的 background.js 中,我有这个
var ajaxResponse;
$.ajax(
type:'POST',
url:'www.somewebsite.com/login/login.asp',
headers:
'origin': 'https://www.somewebsite.com'
,
success: function(response)
ajaxResponse = response;
);
如您所见,原点已更改。但是当这个 Chrome 扩展被执行时,原点被覆盖到 chrome-extension://iphajdjhoofhlpldiilkujgommcolacc
并且控制台给出错误 'Refused to set unsafe header "origin"'
我已关注 Chrome API (http://developer.chrome.com/extensions/xhr.html),并已将权限设置如下
"permissions": [
"https://www.somewebsite.com/*"
],
有谁知道如何在标题中正确设置原点?谢谢!
【问题讨论】:
你不能。你为什么要改变原点? @abraham,我们应该可以。在 Chrome 扩展 API 中,它说“常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到同源策略的限制。扩展并没有那么有限。只要它首先请求跨域权限,扩展程序就可以与其源之外的远程服务器通信。 (developer.chrome.com/extensions/xhr.html) 扩展不受跨域限制是正确的,但您不能通过更改原点来做到这一点。您只需发出 XHR 请求,Chrome 不会阻止它。 【参考方案1】:您可能误解了 the docs:扩展程序可以请求访问其来源之外的远程服务器
这意味着扩展程序可以将请求发送到远程服务器(即浏览器本身不会像普通网页的 JS 那样阻止请求)。 这不意味着允许扩展程序随请求一起发送任意标头,也不意味着远程服务器将响应请求。
因此,如果远程服务器需要 Origin
标头的特定值,那么您无能为力,因为根据 the specs 您不允许设置 @ 987654324@ 标头(此限制也适用于扩展)。
【讨论】:
是否可以使用某种代理,可以使用 curl、burp 套件等来更改 Origin 标头?在某处了解这种可能性。 当然。您可以使用多个服务器端库来实现您想要的(但您需要一个服务器(或提供该功能的服务))。以上是关于Chrome 扩展:如何更改 AJAX 请求标头中的来源?的主要内容,如果未能解决你的问题,请参考以下文章
在 Ext JS Ajax 请求中发送“授权”标头,Chrome 与 Firefox
html Google Chrome扩展程序:蜂蜜(请参阅Ext错误:此扩展程序无法修改网络请求的请求标头“Referer”