Request Header Or Cookie Too Large
運營反饋?Nginx?報 400 錯誤,具體點說:Request Header Or Cookie Too Large。其實隨便搜搜就知道可以通過加大?client_header_buffer_size 和?large_client_header_buffers 來解決問題,不過這里面有一些細節值得討論,正所謂:知其然,知其所以然。
?
首先,讓我們想想為何 Nginx 不能用一個指令來搞定問題,而要用兩個指令?為了搞清楚這個問題,我們不妨先看看官方文檔的描述:
- client_header_buffer_size: Sets buffer size for reading client request header. For most requests, a buffer of 1K bytes is enough. However, if a request includes long cookies, or comes from a WAP client, it may not fit into 1K. If a request line or a request header field does not fit into this buffer then larger buffers, configured by the large_client_header_buffers directive, are allocated.
- large_client_header_buffers: Sets the maximum number and size of buffers used for reading large client request header. A request line cannot exceed the size of one buffer, or the 414 (Request-URI Too Large) error is returned to the client. A request header field cannot exceed the size of one buffer as well, or the 400 (Bad Request) error is returned to the client. Buffers are allocated only on demand. By default, the buffer size is equal to 8K bytes. If after the end of request processing a connection is transitioned into the keep-alive state, these buffers are released.
大概意思是說 Nginx 使用?client_header_buffer_size 緩存客戶端的請求頭,一旦空間不夠了,就通過?large_client_header_buffers 按需擴容。這樣做可以平衡資源和性能。
比如說大部分請求頭的大小在 2K 以內,小部分的請求頭在 10K 左右,此時理論上我們可以通過調整?client_header_buffer_size 到 10K 來解決問題,不過這樣的話無疑浪費了寶貴的內存,更好的方法是調整?client_header_buffer_size 到 2K 滿足大部分請求頭的需求,至于小部分 10K 的請求頭,則通過調整?large_client_header_buffers 來滿足。
其次,讓我們看看如何了解請求頭的情況,這里試試一個名為 ngrep 的小工具:
ngrep
下面是我秀 awk 的時刻了,比如統計一下請求頭都有多長:
shell> ngrep -W byline 'GET /' 'tcp and dst port 80' |awk -v RS="#+" -v FS="\n" '{ print length() }'再比如查詢一下大于 1K 的請求頭:
shell> ngrep -W byline 'GET /' 'tcp and dst port 80' |awk -v RS="#+" -v FS="\n" 'length() > 1000'轉載于:https://www.cnblogs.com/lcword/p/8098402.html
總結
以上是生活随笔為你收集整理的Request Header Or Cookie Too Large的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS开发之线程间的MachPort通信
- 下一篇: C语言博客作业--结构体