/seu_calvin后回车到我们看到该博客的主頁,这中间经历了什么呢简单地回答这个问题,大概是经历了域名解析、TCP的三次握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码同时请求html代码中的资源(如js、css、图片等)、最后浏览器对页面进行渲染并呈现给用户。下面分别介绍一下每个过程
对应的IP地址并且没有过期,则解析成功
(2)如果(1)中未找到,那么Chrome会搜索操作系统自身的DNS缓存(可以在命令行下使用
(4)如果(3)中未找到瀏览器首先会找TCP/IP参数中设置的本地DNS服务器,如果要查询的域名包含在本地配置的区域资源中则完成域名解析,否则根据本地DNS服务器会请求根DNS服务器
(5)本地DNS会把请求发至13台根DNS,根DNS服务器收到请求后会返回负责这个域名(.net)的服务器的一个IP本地DNS服务器使用该IP信息联系负责.net域嘚这台服务器。这台负责.net域的服务器收到请求后如果自己无法解析,会返回.net域的下一级DNS服务器地址()给本地DNS服务器以此类推,直至找到
这个部分正好之前整理过,可以参考
TCP三次握手建立连接成功后,客户端按照指定的格式开始向服务端发送HTTP请求服务端接收请求后,解析HTTP请求处理完业务逻辑,最后返回一个具有标准格式的HTTP响应给客户端
HTTP请求格式如下所示四部分组成,分别是请求行、请求头、空行、消息体每部分内容占一行。
主体:客户端发给服务端的请求数据这部分数据并不是每个请求必须的。
(1)关于GET和DELETE将要处理的资源信息直接放在了URL中通过"?<键值对>&<键值对>“的形式追加。但是URL最大长度为1024字节
(2)关于POST和PUT的请求参数存储在报文的主体中。每一个参数都以”--boundary值“+"属性信息"+”空行“+"参数值"的数据结构存储请求数据的最后以”--boundary值--“的格式结尾。
服务器接收处理完请求后返回一个HTTP响应消息给客戶端HTTP响应消息的格式包括:状态行、响应头、空行、消息体。每部分内容占一行
响应头:用于说明数据的一些信息,比如数据类型、內容长度等键值对
消息体:服务端返回给客户端的HTML文本内容。或者其他格式的数据比如:视频流、图片或者音频数据。
4 浏览器解析html代碼并请求html代码中的资源
浏览器拿到html文件后,就开始解析其中的html代码遇到js/css/image等静态资源时,向服务器端发起一个HTTP请求如果服务器端返回304狀态码(告诉浏览器服务器端没有修改该资源),那么浏览器会直接读取本地的该资源的缓存文件否则开启新线程向服务器端去请求下載。(这个时候就用上keep-alive特性了建立一次HTTP连接,可以请求多个资源)
最后,浏览器利用自己内部的工作机制把请求到的静态资源和html代碼进行渲染,再呈现给用户