![](/img/trans.png)
[英]How to ensure that `self.skipWaiting()` works while allowing POST requests in service worker's fetch event
[英]Javascript Cloudflare worker script not allowing post requests
因此,我正在測試cloudflare網絡工作者腳本,但似乎無法使我的代碼與POST請求等一起使用。
url_without_query_strings = request.url.split('?')[0] //remove all query strings
const response = await fetch(url_without_query_strings, {
method: request.method,
headers: request.headers
})
return response
誰能看到我在做什么錯?
問題在於您僅從請求中復制method
和headers
,但它具有更多的屬性。 例如,POST請求具有不復制您代碼的body
屬性。
為了執行從URL繼承原始請求中所有內容的提取,請執行以下操作:
const response = await fetch(url_without_query_strings, request)
也就是說,將request
本身作為第二個參數而不是dict傳遞。 這是有效的,因為請求對象的屬性名稱與fetch()
第二個參數期望的所有選項完全匹配。
請注意,尷尬的是,如果您要修改除URL之外的任何請求屬性,但要使其他屬性保持不變,則必須將請求作為第一個參數傳遞,並在第二個參數中指定修改:
const response = await fetch(request, {headers: myHeaders})
這意味着,如果要修改URL 和其他一些屬性,則需要執行兩個步驟-首先創建一個新的Request
對象來更改URL,然后修改標頭:
let request2 = new Request(newUrl, request)
const response = await fetch(request2, {headers: myHeaders})
或者,當然,您可以執行相反的順序:
let request2 = new Request(request, {headers: myHeaders})
const response = await fetch(newUrl, request2)
或者,對於標頭的特定情況,您也可以利用以下事實:一旦構建了自己的Request
對象,就可以直接修改其標頭:
let request2 = new Request(newUrl, request)
request2.headers.set("X-Foo", "Bar")
const response = await fetch(request2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.