【问题标题】:Creating a new Request with a new URL object使用新 URL 对象创建新请求
【发布时间】: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.methodrequest.headersrequest.bodyrequest.mode 等。 ..)。其中一件事情不会如您所愿(请参阅此处“init”参数的完整列表:developer.mozilla.org/en-US/docs/Web/API/Request/Request

标签: javascript cloudflare


【解决方案1】:

你所拥有的应该可以工作。有关于为什么它应该在这里工作的文档:https://developers.cloudflare.com/workers/templates/pages/modify_req_props/ 它具体抛出的错误是什么?您获取的 URL 是否与原始请求的主机名不同?构造请求时不包含请求是否有效(如new Request(newRequestUrl)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2020-08-01
    • 2015-07-29
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多