我正在尝试制作我的第一个Chrome扩展程序,这是一次非常好的学习体验。我差不多完成了,但最后一件事就是杀了我。
我知道Google不希望您使用内容长度(如here所述),但我正在使用一个API,当我发布POST时,身份验证需要它。 This extension说它可以做到,但我觉得我写的应该有效。最近是否在新版Chrome中屏蔽了该内容?
这些是我发送的标题:
{
"ReplaceHeaders": true,
"rh-Authentication": "<my auth token>",
"rh-Timestamp": "<timestamp>",
"rh-Content-Length": body.length
}
这是用新标题替换“rh”标题的部分(所有内容都带有“rh-”,除了“rh-”,如果它甚至有意义的话。):
chrome.webRequest.onBeforeSendHeaders.addListener(function(data) {
newHeaders = false;
_.find(data.requestHeaders, function(header) {
if ((header.name === "ReplaceHeaders") && (header.value)) {
_.find(data.requestHeaders, function(h) {
if (h.name.substring(0, 3) === "rh-") {
if (newHeaders === false) { newHeaders = []; }
newHeaders.push({
name: h.name.substring(3, h.name.length),
value: h.value
});
}
});
return;
}
});
if (!!newHeaders) {
// Update headers
return {requestHeaders: newHeaders};
}
}, { urls: ["<all_urls>"] }, ["requestHeaders", "blocking"]);
当我发出GET请求时,我没有“rh-ContentLength”标头并且它工作正常(我可以看到onSendHeaders,onHeadersReceived等)。一切都被取代,响应如预期。但是当我用“rh-Content-Length”发出POST请求时,我只看到onSendHeaders,之后什么也没看到。
GET和POST的onSendHeaders都有新格式化的标题。
答案 0 :(得分:1)
好的,所以我在凌晨3点发布了。在得到一些急需的睡眠后,我今天早上醒来并与朋友谈论了这件事。他指出错误实际上是在我的ajax电话中。我解决了这个问题,现在我可以从我的扩展程序中发送Content-Length。上面的代码确实有效。
我上面发布的代码的一些注释,供稍后搜索的人使用:
虽然未经过测试,但这应该适用于Chrome认为无法通过的其他标头。以下是Google在onBeforeSendHeaders中未提供的标题列表(如文档here所示):
希望这有帮助。