簡體   English   中英

如何在服務人員中確定哪個 HTML5 頁面發起了獲取請求?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM