Jon*_*eff 1 redirect http http-headers server
我很好奇 HTTP 重定向是如何工作的,并且想知道客户端是否必须请求一次或两次。
当客户端请求 urlhttp://example.com/foo和服务器响应301(永久重定向)到 时http://example.com/bar,服务器是否也发送/barurl的响应?还是客户必须要求/bar?
我试图用图形表达我的想法:
1:
deceze 的回答对于 HTTP/1.1 及更早版本是完全正确的,即服务器必须等待客户端处理 301 并请求新 URL,或者延迟到其缓存。
在 HTTP/2 中,服务器可以使用称为服务器推送的功能同时(或多或少)发送 301 for/bar和 200 for /bar.htmlat。服务器推送在RFC 7540 的第 8.2 节中进行了描述。基本上,当服务器发送 301 for 时/bar,它会发送另一个带有 200 for 的流/bar.html,以及有关客户端请求内容的信息/bar.html(方法、资源、请求中的 HTTP 标头等)。
服务器推送确实要求客户端和服务器都支持 HTTP/2,它们都支持服务器推送,并且客户端没有通过将SETTINGS_PUSH_ENABLED 参数设置为 0来请求禁用服务器推送。服务器和服务器之间的任何代理或其他中介客户端也可以自由选择不将服务器推送的内容传递给客户端。
所以如果你的服务器支持 HTTP/2,图形 #1 是可能的,但你不能保证它会发生,尽管大多数现代浏览器都支持 HTTP/2 和服务器推送。