async GET request with body from browser

流过昼夜 提交于 2019-12-08 07:51:08

问题


Ok, I know it's a bad idea and it shouldn't be done but for the sake of this question please assume there's no other way - I am given API endpoint that requires GET request with empty object as a body.

Is there a way to do async request from browser? I'm using axios library which uses XMLHttpRequest under the hood and MDN says that send wipes the body when HTTP method is GET. I tried using native fetch but it gives me this error in browser: TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

Is there any way to do it?


回答1:


No, there isn't.

GET requests can't have a request body, you can't make them have one. GET requests only retrieve data, they never send data.

An API that requires GET request with empty object as a body just doesn't work.

Edit:

Apparently, GET requests are allowed to have a body. Most implementations will ignore it or reject the request. But even if the server that provides your API allows a body, you can't use it:

From the spec about XMLHttpRequest#send:

Initiates the request. The optional argument provides the request entity body. The argument is ignored if request method is GET or HEAD. Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set.

From the spec about the Request class in the fetch API:

If either init’s body member is present and is non-null or inputBody is non-null, and request’s method is GET or HEAD, then throw a TypeError.

That means that the answer to your question is still No.



来源:https://stackoverflow.com/questions/45550863/async-get-request-with-body-from-browser

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!