【发布时间】:2020-01-02 16:47:46
【问题描述】:
在我们工作的域(Cloudflare 工作人员)中,我们需要创建一个新的 Request 对象,以便稍后修改请求的 URL/主机名。通过克隆原始请求创建一个新的 Request 对象完全没有问题:
let newRequest = new Request(request);
let response = await fetch(newRequest);
但是一旦我们将一个新的 URL 对象输入到 Request 对象中,我们就会得到不同的行为:
let newRequestUrl = new URL(request.url);
let newRequest = new Request(newRequestUrl, request);
let response = await fetch(newRequest);
我不希望上述行为会发生变化,因为我们输入的是同一个 url。但这确实表现不同,并导致 JS 脚本和其他引用无法加载等。
我们已经证明我们的问题是由这些行引起的,因为以下工作成功:
let newRequest = new Request(request.URL , request);
let response = await fetch(newRequest);
为什么创建一个新的 URL 对象会导致行为发生变化?
【问题讨论】:
-
在创建newRequest的时候不把request传给构造函数会怎样?
-
问题是您会丢失所有标头等,我们希望保持请求完全相同,但只需更改 URL/主机名。
-
重新执行创建第一个
request的代码怎么样? -
无论如何,作为调试步骤,在创建原始请求后,记录第二个构造函数将查找的所有内容(
request.method、request.headers、request.body、request.mode等。 ..)。其中一件事情不会如您所愿(请参阅此处“init”参数的完整列表:developer.mozilla.org/en-US/docs/Web/API/Request/Request)
标签: javascript cloudflare