因此,我正在测试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
任何人都可以看到我在做什么错吗?
答案 0 :(得分:2)
问题是您仅从请求中复制了method
和headers
,但是它具有更多的属性。例如,POST请求具有body
属性,该属性不会复制您的代码。
要执行获取操作以继承原始请求中除URL之外的所有内容,请执行以下操作:
const response = await fetch(url_without_query_strings, request)
也就是说,将request
本身作为第二个参数而不是字典。之所以行之有效,是因为请求对象的属性名称与fetch()
的第二个参数期望的所有选项完全匹配。
请注意,尴尬的是,如果您想修改URL以外的任何请求属性,但保持其他属性不变,则必须将请求作为 first 参数传递,并在第二个参数:
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)