我的代碼部署在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 )的試了一下就好了。
說的再好,不如行動。不怕慢,就怕站。
作者:習慣沉澱
如果文中有誤或對本文有不同的見解,歡迎在評論區留言。