如何使浏览器将所有HTTP标头传递给ServiceWorker?

时间:2018-08-05 17:39:43

标签: http-headers service-worker

我需要在ServiceWorker中读取浏览器请求中发送的HTTP标头。

我的问题是event.request对象只有几个HTTP标头(acceptaccept-languageuser-agent),而不是全部。

这是一个带有运行ServiceWorker的简单HTML页面的测试用例:

<html>
    <head>
        <script type="text/javascript">
            navigator.serviceWorker.register('./service-worker.js');
        </script>
    </head>
    <body>
        <img src="Note.png"/>
    </body>
</html>

此ServiceWorker只是转储它获得的请求标头:

self.addEventListener('fetch', function(event) {
    for (let key of event.request.headers.keys()) {
        console.log("key=" + key + " value=" + event.request.headers.get(key));
    }
});

这是Firefox上的结果:

key=accept value=*/*
key=accept-language value=fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3

然后在Chromium上显示结果:

key=accept value=image/webp,image/apng,image/*,*/*;q=0.8
key=user-agent value=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/68.0.3440.75 Chrome/68.0.3440.75 Safari/537.36

如果删除ServiceWorker,我希望将所有标头发送到服务器:

Accept: image/webp,image/apng,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Host: localhost:8383
Referer: http://localhost:8383/testcase-serviceworker-fetch-request-headers/index.html
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/68.0.3440.75 Chrome/68.0.3440.75 Safari/537.36

如何读取event.request.headers中缺少的这些HTTP标头?

1 个答案:

答案 0 :(得分:0)

基于https://github.com/w3c/ServiceWorker/issues/212的评论,我认为这是不可能的。

我的理解是,浏览器会在请求过程中稍后添加这些标头,因此ServiceWorker尚无法使用它们。