由于 Amazon ELB 截断了一个长(超过 1K 个字符)的 URL,我们似乎遇到了错误。
我已经搜索了常见的嫌疑人,但找不到关于 Amazon ELB 的 URL 长度限制的任何讨论。
亚马逊网址的长度有限制吗?如果是这样,有没有办法增加该限制?
我使用一个简单的 bash 脚本对我在 ELB 后面运行的域进行了测试:
S='a';
URL='http://example.com/?foo=';
while true;
do
echo $URL$S | wc -c;
curl -I "$URL$S";
S=$S$S;
done
Run Code Online (Sandbox Code Playgroud)
这工作得很好一段时间:
2081
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Date: Tue, 05 Feb 2013 15:01:44 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive
4129
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Date: Tue, 05 Feb 2013 15:01:46 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
但是一旦越过 8192 长度障碍就失败了:
8225
HTTP/1.1 414 Request-URI Too Large
Content-length: 337
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 05 Feb 2013 15:01:47 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive
16417
HTTP/1.1 414 Request-URI Too Large
Content-length: 337
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 05 Feb 2013 15:01:47 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
Apache 将失败的请求记录在不同的文件中,因为该GET
字符串位于Host:
标头之前,因此 Apache 从未确定要使用哪个 vhost。
尽管如此,它是仍然Apache的响应,而不是ELB,甚至达到了128KB在一个单一的GET
字符串。完整的 128KB 请求记录在默认的 Apache 日志文件中。256KB后,curl
处理请求失败。
Amazon ELB 中似乎没有任何 URL 长度限制。
小智 6
我们从 AWS Support 收到以下答复(格式化我的):
请注意,所有负载均衡器的 URI 长度都有限制,当您收到 414 错误时,您的 GET 请求必须超过以下限制。
对于 ALB,HTTP/1.x 标头和 HTTP/2 标头的 HTTP 标头限制存在差异。请参阅有关HTTP 标头限制的文档。
Application Load Balancer 的HTTP/1.x 标头具有以下大小限制:
Application Load Balancer 的HTTP/2 标头具有以下大小限制:
CLB 施加的唯一限制是 HTTP 动词(GET、POST 等)的长度,并且该长度必须为 127 字节或更少,任何大于此值的动词都会导致 CLB 返回 HTTP 错误 405“METHOD_NOT_ALLOWED” .
由于 NLB 在开放系统互连 (OSI) 模型的第四层运行,因此对 HTTP 标头没有限制。它尝试在侦听器配置中指定的端口上打开与选定目标的 TCP 连接。
归档时间: |
|
查看次数: |
8963 次 |
最近记录: |