【问题标题】:How to access request headers in onHeadersReceived event in Chrome extension如何在 Chrome 扩展程序的 onHeadersReceived 事件中访问请求标头
【发布时间】:2014-05-02 18:29:35
【问题描述】:

我正在做类似的事情:

chrome.webRequest.onBeforeSendHeaders.addListener(function (details) {

    for (var i = 0; i < details.requestHeaders.length; ++i)
    {
        if (details.requestHeaders[i].name.toLowerCase() === 'user-agent')
        {
            message.useragent = details.requestHeaders[i].value;
        } 
        else if (details.requestHeaders[i].name.toLowerCase() === 'referer')
        {
            message.referrer = details.requestHeaders[i].value;
        } 
        else if (details.requestHeaders[i].name.toLowerCase() === 'cookie')
        {
            message.cookies = details.requestHeaders[i].value;
            console.log(details.requestHeaders[i].value);
        }
    }
    return {
        requestHeaders: details.requestHeaders
    };
}, {
    urls: [
        '<all_urls>'
    ],
    types: [
        'main_frame',
        'sub_frame',
        'xmlhttprequest'
    ]
}, [
    'blocking',
    'requestHeaders'
]);

and on receiving response:

chrome.webRequest.onHeadersReceived.addListener(function (details) {

    message.url = details.url;
    // and some other details
    ...

但是最近发现有时候存储的请求参数和存储的响应参数属于不同的请求响应对。那么,这是否可以在 onHeadersReceived 事件中访问请求标头以防止不匹配。

【问题讨论】:

  • 旁注:由于您根本没有修改请求标头,因此我建议您不要在 webRequest 事件中使用blocking。阻塞事件会减慢网络请求。

标签: javascript google-chrome google-chrome-extension http-headers


【解决方案1】:

您可以使用requestId 字段将onBeforeSendHeaders 中保存的标头与onHeadersReceived 中的标头匹配。

请求 ID 在浏览器会话中是唯一的。因此,它们可用于关联同一请求的不同事件。

【讨论】:

  • 这将需要存储多个请求。我们不能使用 onHeaderReceived 中的请求 ID 引用请求标头
  • @adnankamili 没有内置机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
相关资源
最近更新 更多