我很好奇HTTP重定向是如何工作的,并且想知道客户端是否需要请求一次或两次。
当客户端请求网址http://example.com/foo
和服务器响应301
(永久重定向)到http://example.com/bar
时,服务器是否也会发送/bar
的响应网址是什么?或者客户是否必须请求/bar
?
我试图用图形表达我的想法:
1:
<小时/> 2:
答案 0 :(得分:4)
deceze's answer对于HTTP / 1.1及更早版本是完全正确的,即服务器必须等待客户端处理301并请求新URL,或者推迟其缓存。 / p>
在HTTP / 2中,服务器可以同时使用某个功能同时(或多或少)同时发送/bar
的301和/bar.html
的200称为服务器推送。服务器推送在RFC 7540, section 8.2中描述。基本上,当服务器为/bar
发送301时,它会发送另一个stream,其中包含/bar.html
的200,以及有关/bar.html
客户端请求的信息看起来像(方法,资源,请求中的HTTP标头等)。
服务器推送确实要求客户端和服务器都支持HTTP / 2,它们都支持服务器推送,并且客户端没有通过将SETTINGS_PUSH_ENABLED parameter设置为0来请求禁用服务器推送。任何代理或服务器和客户端之间的其他中介也可以自由选择不将服务器的推送内容传递给客户端。
因此,如果您的服务器支持HTTP / 2,则图形#1可能可能,但您无法保证它会发生,尽管大多数现代浏览器都支持使用服务器推送的HTTP / 2。
答案 1 :(得分:1)
服务器只能发送一个响应,它无法回答301 和 200.客户端必须再次请求新资源。这也允许客户端使用他们的缓存,也许客户端实际上不需要请求资源。