1、校验URL
浏览器会检测这个url是否正确存在,如果不合法,返回一个默认的页面。(比如,如果输入的不是合法的网址,浏览器将调用默认搜索引擎比如百度,对输入的内容进行搜索,返回搜索结果页)。
2、DNS解析
浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址。解析优先级依次为:浏览器缓存 => 系统缓存 => 路由器缓存 => 本地域名服务器(LDNS) => 顶级域名服务器
3、建立TCP连接(三次握手)
当解析得到目的地的IP地址之后,在进行http请求之前,需要先建立TCP连接。TCP建立连接的过程,即三次握手。在别的文章中提到了,这里不再多说。
4、发送HTTP请求
HTTP协议定义了几种请求方式,比如:GET/POST/PUT/DELETE等等,在浏览器输入URL进行请求,属于GET方法。
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少。
请求行: 包括请求方式、请求地址、协议版本
请求头: 包括一系列 key:value格式的数据。比如 Content-Type:application/x-www-form-urlencoded
请求数据:真正请求所需要的数据,比如登录时的账号密码。
一个POST方法的HTTP请求报文实例:
POST /test/index.html HTTP/1.1 请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=admin&password=123456 请求数据
5.、服务器处理请求并返回HTTP报文
请求到达服务器,服务器经过后端自定义的规则进行处理。比如经过Nginx进行路由,如果后端业务是由JAVA语言的SpringCloud实现,可能经过网关路由,鉴权,然后经过一系列的过滤器、拦截器,再到实际的业务代码。当执行完毕后,将执行结果组装成HTTP响应报文返回。
6、浏览器解析渲染页面
浏览器对响应报文进行解析渲染,这个过程包括数据解析,资源加载(比如JS、CSS、图片)。