【发布时间】:2024-09-26 05:55:02
【问题描述】:
在我的环境中,我使用 perlbal 将请求重定向到 nginx。如果 verify_backend 已打开。 perbal 将向 nginx 发送“OPTIONS *”请求,但 nginx 将其响应为错误请求。
根据RFC2616:
如果 Request-URI 是星号(“”),则 OPTIONS 请求通常应用于 ?server 而不是特定资源。由于服务器的通信选项通常取决于资源,因此“”请求仅用作“ping”或“no-op”类型的方法;除了允许客户端测试服务器的功能之外,它什么也不做。例如,这可用于测试代理的 HTTP/1.1 合规性(或不合规性)。
我认为 perlbal 正在尝试发送这种请求,但默认情况下 nginx 无法处理。
当我尝试发送请求“OPTIONS * HTTP/1.0”时,总是收到“HTTP 400 bad request”:
127.0.0.1 - - [18/Feb/2013:03:55:47 +0000] "OPTIONS * HTTP/1.0" 400 172 "-" "-" "-"
但它适用于没有星号请求的“OPTIONS / HTTP/1.0”选项:
127.0.0.1 - - [18/Feb/2013:04:03:56 +0000] "OPTIONS / HTTP/1.0" 200 0 "-" "-" "-"
如何配置 nginx 让它响应 http return 200 而不是 HTTP return 400 ?
【问题讨论】:
-
我不认为这是一个解决方案,但您是否尝试过使用带有
Host:标头的 HTTP/1.1?唉...OPTIONS * HTTP/1.1\r\nHost: devserver\r\n\r\n。根据RFC2616 Section 9:The set of common methods for HTTP/1.1 is defined below... -
嗨,谢谢你的想法,但我还是得到了
400 Bad Request,甚至没有机会输入标题我试图通过 telnet 发出带有主机标题的选项请求:` telnet 10.1.128.97 5274 Trying 10.1.128.97... 连接到 10.1.128.97。转义字符是'^]'。选项 * HTTP/1.1400 错误请求 400 错误请求
nginx/1.2.6 连接被外部主机关闭。 `
标签: http nginx bad-request http-options-method