繁体   English   中英

fetch 返回 400 个错误的请求

[英]fetch returns 400 bad request

我正在尝试向我自己的服务器发出提取请求。 理想情况下,错误 500 正是我想要的,因为这意味着请求已成功发送到服务器,而我的服务器端代码未实现,因此我希望会有 HTTP 500 响应。

但是,当我放入另一个变量时,它会返回错误 400,这意味着请求格式不正确,所以它甚至没有到达服务器,我猜?

我不明白为什么更改变量会导致浏览器说请求格式不正确(400)。

返回错误 500:

fetch("http://example.com/webpush/save_information", {"credentials":"include","headers":{"accept":"*/*","accept-language":"en-US,en;q=0.9","alexatoolbar-alx_ns_ph":"AlexaToolbar/alx-4.0.3","cache-control":"no-cache","pragma":"no-cache"},"referrer":"http://example.com/","referrerPolicy":"no-referrer-when-downgrade","body":JSON.stringify({'test':'1'}),"method":"POST","mode":"cors"});

返回错误 400:

fetch("http://example.com/webpush/save_information", {"credentials":"include","headers":{"accept":"*/*","accept-language":"en-US,en;q=0.9","alexatoolbar-alx_ns_ph":"AlexaToolbar/alx-4.0.3","cache-control":"no-cache","pragma":"no-cache"},"referrer":"http://example.com/","referrerPolicy":"no-referrer-when-downgrade","body":JSON.stringify({'browser':'chrome'}),"method":"POST","mode":"cors"});

有人能看出区别吗?

编辑:

显然,它是根据评论生成的服务器端,所以我正在向我的问题添加信息。 我继续从返回错误 400 的请求的控制台中获取完整的提取和完整的卷曲:

curl 'https://example.com/webpush/save_information' -H 'origin: https://example.com' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9' -H 'alexatoolbar-alx_ns_ph: AlexaToolbar/alx-4.0.3' -H 'cookie: __cfduid=d558e24311af0551aa5e71c5182a5973c1543351195; _ga=GA1.2.252947937.1543425255; _gid=GA1.2.1592442174.1550785627; gsScrollPos-4659=0; gsScrollPos-4711=; gsScrollPos-4678=' -H 'pragma: no-cache' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' -H 'content-type: application/json' -H 'accept: */*' -H 'cache-control: no-cache' -H 'authority: example.com' -H 'referer: https://example.com/' --data-binary '{"status_type":"subscribe","subscription":{"endpoint":"https://fcm.googleapis.com/fcm/send/fiGP6rOnDwE:APA91bEYi2Oydq9c5zMug2QeZK3VDd089-7-YylSnUFqpqc3WlFrZT2tkejzROplb0SHCMA2Tc9Xq0ujhpUa3S-8yWpONgNJ4tFEkyy0m3jcvi3BP2FtNp6_pbdgtLP2nwbuDjkHpc8r","expirationTime":null,"keys":{"p256dh":"BGSJ9xrSKmkTKXjMGYfFAWZ2c_Cj44QJ1k5HkvsDPF-8iphCdQAaSS_ob3G7MOSzsEO-L7fUVs7US21MfuBV-4c","auth":"v8RL7EgDnBlSXnvT7PhvVw"}},"browser":"chrome"}' --compressed

fetch("https://example.com/webpush/save_information", {"credentials":"include","headers":{"accept":"*/*","accept-language":"en-US,en;q=0.9","alexatoolbar-alx_ns_ph":"AlexaToolbar/alx-4.0.3","cache-control":"no-cache","content-type":"application/json","pragma":"no-cache"},"referrer":"https://example.com/","referrerPolicy":"no-referrer-when-downgrade","body":"{\"status_type\":\"subscribe\",\"subscription\":{\"endpoint\":\"https://fcm.googleapis.com/fcm/send/fiGP6rOnDwE:APA91bEYi2Oydq9c5zMug2QeZK3VDd089-7-YylSnUFqpqc3WlFrZT2tkejzROplb0SHCMA2Tc9Xq0ujhpUa3S-8yWpONgNJ4tFEkyy0m3jcvi3BP2FtNp6_pbdgtLP2nwbuDjkHpc8r\",\"expirationTime\":null,\"keys\":{\"p256dh\":\"BGSJ9xrSKmkTKXjMGYfFAWZ2c_Cj44QJ1k5HkvsDPF-8iphCdQAaSS_ob3G7MOSzsEO-L7fUVs7US21MfuBV-4c\",\"auth\":\"v8RL7EgDnBlSXnvT7PhvVw\"}},\"browser\":\"chrome\"}","method":"POST","mode":"cors"});

这是本教程的客户端实现部分。

有什么东西看起来不正常吗?

客户端错误使用 4XX ,服务器错误使用 5XX 只是一个约定。 这两种类型的错误都源自服务器。 您应该查看服务器代码以确定错误为 400 或 500 的原因。

如果没有您正在使用的服务器代码,就很难给出确切的原因。 由于我无权访问您的服务器,因此这里有一个类似的服务器文件,因此您可以了解错误是如何生成的:

  • return HttpResponse(status=400)表示如果在尝试从请求正文解析 JSON 时出现 Python ValueError ,服务器将返回 400 错误代码。
  • 此示例没有类似return HttpResponse(status=500) ,但这会导致 500 状态代码。

我猜像save_info这样的方法负责处理对http://example.com/webpush/save_information/...请求,因为urls.py 中这一行

url(r'^save_information', views.save_info, name='save_webpush_info')

所以你可以在你的服务器代码中寻找类似的东西(并且可能将它们添加到你的问题中)。

在您链接的教程的~/djangopush/djangopush/views.py中有一个服务器发送错误的示例,但我认为它与您正在获取的 API 没有直接关系。 但是它发送的状态代码略有不同:

  • return JsonResponse(status=400, data={"message": "Invalid data format"})
  • return JsonResponse(status=500, data={"message": "An error occurred"})

同样,上面的示例几乎肯定不是导致错误的直接原因。 它们只是查找内容的指南。 如果您共享适当的服务器文件,我们可以给您一个更具体的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM