話不多說,直入正題。首先我們看下HTTP狀態碼415和406,官方定義
狀態碼 | 含義 |
---|---|
415 | 對於當前請求的方法和所請求的資源,請求中提交的實體並不是服務器中所支持的格式,因此請求被拒絕。 |
406 | 請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體。 除非這是一個 HEAD 請求,否則該響應就應當返回一個包含可以讓用戶或者瀏覽器從中選擇最合適的實體特性以及地址列表的實體。實體的格式由 Content-Type 頭中定義的媒體類型決定。瀏覽器可以根據格式及自身能力自行作出最佳選擇。但是,規範中並沒有定義任何作出此類自動選擇的標準。 |
介紹下使用場景,客戶端請求body爲xml格式,中間一層nginx反向代理,然後是上游服務。在使用過程中,一開始設定content-type:text/xml,然後發現客戶端不斷有415的狀態返回。經過調試,將content-type修改爲application/xml後415的問題沒有了,但是又出現了406的問題。
經過網上調研,將header中設置Accept:application/xml; 至此,415和406問題全部解決。
附上兩個header的區別:
(1)Accept代表發送端(客戶端)希望接受的數據類型。
比如:Accept:text/xml;
代表客戶端希望接受的數據類型是xml類型
(2)Content-Type代表發送端(客戶端|服務器)發送的實體數據的數據類型。
比如:Content-Type:text/html;
代表發送端發送的數據格式是html。