来自浏览器的带有正文的异步 GET 请求

2024-04-14

好吧,我知道这是一个坏主意,不应该这样做,但为了这个问题,请假设没有其他方法 - 我得到的 API 端点需要以空对象作为主体的 GET 请求。

有没有办法从浏览器执行异步请求? 我在用着axios使用的库XMLHttpRequest在引擎盖下和MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/sendsend当 HTTP 方法是时擦除正文GET。 我尝试使用本机fetch但它在浏览器中给了我这个错误:TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

有什么办法可以做到吗?


不,没有。

获取请求 https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET不能有请求主体,你不能让他们有一个。 GET 请求仅检索数据,从不发送数据。

需要以空对象作为主体的 GET 请求的 API 不起作用。

Edit:

显然,GET 请求可以有主体。大多数实现都会忽略它或拒绝该请求。但即使提供 API 的服务器允许主体,你也无法使用它:

从规格来看XMLHttpRequest#send https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-send()-method:

发起请求。可选参数提供请求实体主体。如果请求方法是 GET 或 HEAD,则忽略该参数。如果状态不是 OPENED 或设置了 send() 标志,则抛出“InvalidStateError”异常。

从规格来看Request class https://fetch.spec.whatwg.org/#request-class在获取 API 中:

如果 init 的主体成员存在且非空或者inputBody 不为空, and 请求的方法是GET or HEAD, 然后抛出一个类型错误.

这意味着你的问题的答案仍然是No.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自浏览器的带有正文的异步 GET 请求 的相关文章