Open XiZev opened 3 years ago
通常情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。
不过如果浏览器或者服务器在其头信息中加入了:Connection:Keep-Alive 那么TCP连,这样浏览接在发送后将仍然保持打开状态器就可以继续通过同一个TCP连接发送请求。保持TCP连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。比如,一个Web页面中内嵌的图片就都来自同一个Web站点,如果初始化了一个持久连接,你就可以复用该连接,以请求其他资源,而不需要重新再建立新的TCP连接
到这里似乎请求流程快结束了,不过还有一种情况你需要了解下,比如当你在浏览器中打开baidu.com后,你会发现最终打开的页面地址是 https://www.baidu.org。
这涉及到了一个重定向操作。
在控制台输入如下命令:
curl -I https://baidu.com
注意这里输入的参数是-I,和-i不一样,-I表示只需要获取响应头和响应行数据,而不需要获取响应体的数据,最终返回的数据如下所示:
响应行返回的状态码是301,状态301就是告诉浏览器,我需要重定向到另外一个网址
HTTP/1.1 302 Moved Temporarily
重定向的网址正是包含在响应头的Location字段中,接下来,浏览器获取Location字段中的地址,并使用该地址重新导航
Server: bfe/1.0.8.18 Date: Wed, 25 Aug 2021 14:03:45 GMT Content-Type: text/html Content-Length: 161 Connection: keep-alive Location: http://www.baidu.com/
响应体
< html> < head>
302 Found < body bgcolor="white"> < center>< h1>302 Found < hr>< center>bfe/1.0.8.18 < /body> < /html>
1. 返回请求
一旦服务器处理结束,便可以返回数据给浏览器了。你可以通过curl来查看返回请求数据,具体使用方法是在命令行中输入以下命令:
注意这里加上了-i是为了返回响应行、响应头和响应体的数据,返回的如下所示,你可以结合这些数据来理解服务器是如何响应浏览器的。
响应行,包括协议版本和状态码
响应头包含了服务器自身的一些信息,比如服务器生成返回数据的时间、返回的数据类型(JSON、HTML、流媒体等类型),以及服务器要在客户端保存的Cookie等信息。
发送完响应头后,服务器就可以继续发送响应体的数据,通常,响应体就包含了HTML的实际内容。