HttpRequestMethodNotSupportedException

異常

org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘HEAD’ not supported

異常原因

項目使用的是SprngMVC,查看服務器日誌,發現訪問首頁報了以上的異常。異常的意思是:請求方法“HEAD”不支持,爲何不支持呢?查看項目源碼,發現配置了:@RequestMapping(value = “”,method = RequestMethod.GET)。此方法只支持GET請求,不支持HEAD請求。

解決方法

去掉method = RequestMethod.GET即可

爲何會有HEAD請求

我們在瀏覽器輸入地址,都是GET請求,查看服務器日誌,發現有許多HEAD請求,一時找不到爲何有那麼多HEAD請求。突然想起,項目是用的Tengine做的負載均衡,會不會是Tengine做的請求,通過查看資料,終於明白了,因爲開啓了Tengine的主動式後端服務器健康檢查功能,Tengine會不定時發送HEAD請求,向後端發送的健康檢查包。

參考文章1
參考文章2

Http 1.1 規範定義了一些方法:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE and CONNECT.
常見的是:GET 和 POST。瀏覽器依靠這兩個方法從web服務器發送和獲取數據。

  • GET
    從web服務器獲取數據。
  • POST
    操作web服務器內容,比如:增刪改。

其他的方法呢?
瀏覽器不是唯一與web服務器通信的客戶端,還有:代理服務器(proxy servers)和爬蟲(web crawlers),這兩種類型的客戶端特別喜歡第三個http方法:HEAD。

HEAD和GET相似,不過HEAD方法只返回headers,body被丟棄。
這個主要用來校驗URLs的正確性。(下面的不知如何翻譯)服務器的負載 content-length頭必須返回。The load on the server will most likely remain the same as the content-length header must be returned (and thus potentially calculated based on the generated response body). Only the bandwidth is saved。

發佈了46 篇原創文章 · 獲贊 165 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章