簡體   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