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 请求标头中的来源?的主要内容,如果未能解决你的问题,请参考以下文章

允许跨域 ajax 请求中的标头

在 Ext JS Ajax 请求中发送“授权”标头,Chrome 与 Firefox

Chrome 扩展中的 Origin 标头

html Google Chrome扩展程序:蜂蜜(请参阅Ext错误:此扩展程序无法修改网络请求的请求标头“Referer”

在 Chrome 扩展中使用 AJAX 请求检测 URL 是不是支持 HTTP2?

更改 ajax 请求的 response.statuscode 会引发错误“发送 HTTP 标头后服务器无法设置状态”