天天看點

HTTP 400 Bad request 原因

我的代碼部署在Linux測試環境,我在使用 ​<code>​HttpClient​</code>​ 發送​<code>​http​</code>​請求時遇到問題,請求報 400 Bad request。網上都在說下面這兩個原因。

400 是 HTTP 的狀态碼之一,主要有兩種形式:

1、bad request:意思是 "錯誤的請求"; 2、invalid hostname:意思是 "不存在的域名"。

解釋:

400 Bad Request 是由于明顯的用戶端錯誤(例如,格式錯誤的請求文法,太大的大小,無效的請求消息或欺騙性路由請求),伺服器不能或不會處理該請求。

在 ajax 請求背景資料時比較常見。産生 HTTP 400 錯誤的原因有:

1、前端送出資料的字段名稱或者是字段類型和背景的實體類不一緻,導緻無法封裝;如需要 int,用戶端傳的是 String 2、前端送出的到背景的資料應該是 json 字元串類型,而前端沒有将對象轉化為字元串類型;

解決方法:

1、對照字段名稱,類型保證一緻性 2、使用 stringify 将前端傳遞的對象轉化為字元串:即 data: JSON.stringify(param);

拿我第一個調用的接口來說,我隻需要傳一個​<code>​String​</code>​類型的參數,也不需要 ​<code>​json​</code>​ 類型,是以不符合我的情況,我的代碼沒有出現以上兩種問題,是以貌似還有别的原因。

我是通過代理伺服器來通路的 ​<code>​HTTP​</code>​ 接口。在本地調試的時候沒有走代理,沒有遇到該問題。是以從這裡出發查找問題,最後解決了400的錯誤。

原因是我走代理的時候用的是 ​<code>​HTTP​</code>​ 協定,而目标位址是 ​<code>​HTTPS​</code>​ 的,是以我把目标位址改為 HTTP (也支援 HTTP )的試了一下就好了。

說的再好,不如行動。不怕慢,就怕站。

作者:習慣沉澱

如果文中有誤或對本文有不同的見解,歡迎在評論區留言。