XiZev / blog

record my learning of font-end
0 stars 0 forks source link

服务器端处理HTTP请求流程 #15

Open XiZev opened 3 years ago

XiZev commented 3 years ago

1. 返回请求

一旦服务器处理结束,便可以返回数据给浏览器了。你可以通过curl来查看返回请求数据,具体使用方法是在命令行中输入以下命令:

curl -i https://www.baidu.com

注意这里加上了-i是为了返回响应行、响应头和响应体的数据,返回的如下所示,你可以结合这些数据来理解服务器是如何响应浏览器的。

响应行,包括协议版本状态码

HTTP/1.1 200 OK

响应头包含了服务器自身的一些信息,比如服务器生成返回数据的时间返回的数据类型(JSON、HTML、流媒体等类型),以及服务器要在客户端保存的Cookie等信息。

Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Connection: keep-alive Content-Length: 2443 Content-Type: text/html Date: Wed, 25 Aug 2021 13:53:24 GMT Etag: "58860401-98b" Last-Modified: Mon, 23 Jan 2017 13:24:17 GMT Pragma: no-cache Server: bfe/1.0.8.18 Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

发送完响应头后,服务器就可以继续发送响应体的数据,通常,响应体就包含了HTML的实际内容。

< !DOCTYPE html > ........ < /html >

XiZev commented 3 years ago

2. 断开连接

通常情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。

不过如果浏览器或者服务器在其头信息中加入了:Connection:Keep-Alive 那么TCP连,这样浏览接在发送后将仍然保持打开状态器就可以继续通过同一个TCP连接发送请求。保持TCP连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。比如,一个Web页面中内嵌的图片就都来自同一个Web站点,如果初始化了一个持久连接,你就可以复用该连接,以请求其他资源,而不需要重新再建立新的TCP连接

XiZev commented 3 years ago

3. 重定向

到这里似乎请求流程快结束了,不过还有一种情况你需要了解下,比如当你在浏览器中打开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>