(421) http请求报错:421 Misdirected Request的原因和解决办法
HTTP错误421,即 “Misdirected Request”,是一种服务器无法产生所需响应的HTTP状态代码。这种错误通常是由于客户端(例如,你的浏览器或者你的app)尝试使用同一的连接(连接复用)来发送不同HTTPS证书的请求所引发的。
原因
错误421通常出现在以下准确场合:
- 当客户端试图通过重用已经存活的连接,而这个连接是之前一个不同的HTTPS 域名所已经使用过的;
- 当服务器设置了HTTP/2,并且客户端试图使用同一的连接来发送不同HTTPS证书的请求。
可能的解决方法
- 确保这个问题不是客户端的问题。错误可能与客户端的商业网络网络配置,比如防火墙,有关。或者检查你的用于发出请求的程序或浏览器的设置。
- 检查你的服务器是否支持HTTP/2,如果支持,那么应该确认你的服务器的所有虚拟主机(如果有)都对应一个唯一的IP地址且它们的HTTPS证书与共享该IP地址的其他所有主机相匹配。
- 如果你的服务器是Apache,并且使用了
mod_http2
模块,记得在配置文件中使H2Direct
保持关闭状态。打开H2Direct
可能会导致HTTP/2连接复用而出现421错误。 - 如果你控制不了服务器,或者你必须复用HTTPS连接,只能尝试关闭HTTP/2的支持,因为HTTP/2是强制对HTTPS连接复用。在此情况下,你可能需要与你的服务商进行交涉获取进一步的解决方案。
对于服务端的开发者,可以尝试使用如下配置:
如果使用的是nginx服务器,可以在配置文件中添加以下内容,以解决这个问题:
server {
listen 443 ssl http2;
server_name example.com;
...
ssl_certificate /etc/nginx/ssl/example.com/server.crt; # 路径为你的证书路径
ssl_certificate_key /etc/nginx/ssl/example.com/server.key; # 路径为你的私钥路径
...
location / {
...
proxy_set_header Connection ""; # 设置连接头为空
...
}
}
希望以上的信息能对你有所帮助!
(permission denied什么意思) Linux报 “permission denied” 异常的原因以及解决办法 Linux权限问题解决之道 全网首发(图文详解1)
(类方法) 详解Python 实例方法、类方法和静态方法 三种 Python 方法类型: 全网首发(图文详解1)