我需要在ServiceWorker中读取浏览器请求中发送的HTTP标头。
我的问题是event.request
对象只有几个HTTP标头(accept
,accept-language
或user-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标头?
答案 0 :(得分:0)
基于https://github.com/w3c/ServiceWorker/issues/212的评论,我认为这是不可能的。
我的理解是,浏览器会在请求过程中稍后添加这些标头,因此ServiceWorker尚无法使用它们。