413 request Entity too Large

經過排查,發現服務器使用nginx作爲反向代理服務器,報上名錯誤,是因爲請求長度超過了nginx默認的緩存大小和最大客戶端最大請求大小。

針對post

針對post請求解決辦法: 
修改nginx.conf裏面的幾個相關的配置參數 
client_body_buffer_size 10m(配置請求體緩存區大小, 不配的話) 
client_max_body_size 20m(設置客戶端請求體最大值) 
client_body_temp_path /data/temp (設置臨時文件存放路徑。只有當上傳的請求體超出緩存區大小時,纔會寫到臨時文件中,注意臨時路徑要有寫入權限) 

如果上傳文件大小超過client_max_body_size時,會報413 entity too large的錯誤。 

針對get

針對get請求,我們可以通過修改另外兩個配置來解決請求串超長的問題: 
client_header_buffer_size 語法:client_header_buffer_size size 默認值:1k 使用字段:http, server 這個指令指定客戶端請求的http頭部緩衝區大小絕大多數情況下一個頭部請求的大小不會大於1k不過如果有 來自於wap客戶端的較大的cookie它可能會大於1k,Nginx將分配給它一個更大的緩衝區,這個值可以在 large_client_header_buffers裏面設置。 large_client_header_buffers 語法:large_client_header_buffers number size 默認值:large_client_header_buffers 4 4k/8k 使用字段:http, server 指令指定客戶端請求的一些比較大的頭文件到緩衝區的最大值,如果一個請求的URI大小超過這個值,服務 器將返回一個"Request URI too large" (414),同樣,如果一個請求的頭部字段大於這個值,服務器 將返回"Bad request" (400)。 緩衝區根據需求的不同是分開的。 默認一個緩衝區大小爲操作系統中分頁文件大小,通常是4k或8k,如果一個連接請求將狀態轉換爲 keep-alive,這個緩衝區將被釋放。

爲什麼修改http header的大小就能解決get請求串過長的問題?因爲get請求參數會拼在http header中,所以,修改了http header的大小,就能解決上面問題。

Nginx 400錯誤:HTTP頭/Cookie過大

nginx400錯誤是由於request header過大,通常是由於cookie中寫入了較長的字符串所引起的。
解決方法是不要在cookie裏記錄過多數據,如果實在需要的話可以考慮調整在nginx.conf中的client_header_buffer_size(默認1k)
若cookie太大,可能還需要調整large_client_header_buffers(默認4k),該參數說明如下:
請求行如果超過buffer,就會報HTTP 414錯誤(URI Too Long)
nginx接受最長的HTTP頭部大小必須比其中一個buffer大,否則就會報400的HTTP錯誤(Bad Request)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章