[英]How to determine, in a service worker, which HTML5 page orginated the fetch request?
Service Worker 中是否有一種我不知道的機制,它可以讓我知道從哪個頁面觸發了獲取請求?
Example: I have an HTML page uploaded to my website at /aPageUploadedByUser/onMySite/index.html
, I do want to make sure none of the authorization headers gets passed to any fetch request made by /aPageUploadedByUser/onMySite/index.html
to any資源。
如果我的服務人員確實知道此請求的原始頁面,我可以調整它們以確保安全。
要回答您的問題(但需要注意的是,這不是一個好主意! ),有兩種通用方法,每種方法都有自己的缺點:
Referer:
request header 傳統上設置為發出請求的 web 頁面的 URL。 但是, 可能並不總是為所有類型的請求設置此 header 。
FetchEvent
有一個clientId
屬性,該值可以傳遞給clients.get()
以獲取對創建請求的Client
的引用。 反過來, Client
具有url
屬性。 這里需要注意的是, clients.get()
是異步的(這意味着您不能使用它的結果來確定是否調用event.respondWith()
),並且Client
的 URL 可能在發出請求並且當您閱讀url
屬性時。
通過概述這些方法,更大的問題是以這種方式使用服務工作者不是一種安全的做法。 用戶第一次訪問您的源時,他們不會安裝 Service Worker。 然后在后續訪問中,如果用戶使用 shift 鍵“硬”重新加載頁面,則該頁面也不會由 service worker 控制。 您不能依賴服務工作者的fetch
事件處理程序來實現任何類型的關鍵驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.