针对get请求,我们可以通过修改两个配置来解决请求串超长的问题: client_header_buffer_size 语法:client_header_buffer_size size 默认值:1k
针对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
默认值:4k/8k
使用字段:http, server
指令指定客户端请求的一些比较大的头文件到缓冲区的最大值,如果一个请求的URI大小超过这个值,服务 器将返回一个"Request URI too large" (414),同样,如果一个请求的头部字段大于这个值,服务器 将返回"Bad request" (400)。
那么有人就会觉得奇怪了,为什么修改http header的大小就能解决get请求串过长的问题呢, 这就要从http协议的get请求说起了,其实GET提交,请求的数据会附在URL之后(就是把数据放置在 HTTP协议头中)。
针对POST请求,我们可以调整如下两个配置项来解决:
client_body_buffer_size
语法:client_body_buffer_size the_size
默认值:8k/16k
使用字段:http, server, location
这个指令可以指定连接请求使用的缓冲区大小。
如果连接请求超过缓存区指定的值,那么这些请求或部分请求将尝试写入一个临时文件。
默认值为两个内存分页大小值,根据平台的不同,它可能是8k或16k
client_max_body_size
语法:client_max_body_size size
默认值:client_max_body_size 1m
使用字段:http, server, location
这个指令指定允许客户端请求的最大的单个文件字节数,它出现在请求头部的Content-Length字段。
如果请求大于指定的值,客户端将收到一个"Request Entity Too Large" (413)错误。
需要记住,浏览器并不知道怎样显示这个错误。
同时针对post请求还需要注意下面这个参数的配置,如果不打开这个选项当请求串大于client_body_buffer_size大小时,需要手动去读取存储在磁盘的请求,这里需要注意的是存入磁盘的请求是一个完整的请求并不是大于client_body_buffer_size的部分
client_body_in_single_buffer
语法:client_body_in_single_buffer
默认值:off
使用字段:http, server, location这个指令(0.7.58版本)指定将一个完整的连接请求放入缓冲区,当使用$request_body时推荐使用这个指令以减少复制操作。
如果无法将一个请求放入单个缓冲区,将会被放入磁盘。
在HTTP规范RFC-2616中有这样一段描述:
The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET- based fORMs that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.
HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URI长度进行限制,只是说如果server无法处理太长的URI,可以通过返回414状态码。
规范中虽然未对GET请求的长度做出明确的规定,但是在浏览器和应用服务器中对GET请求却做出限制或者相关的可配置:
const http = require('http');const url = require('url')
来源地址:https://blog.csdn.net/yexudengzhidao/article/details/128069617
--结束END--
本文标题: Nginx如何解决超长请求串
本文链接: https://lsjlt.com/news/411547.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0