一次完整的HTTP请求过程

发布时间 2023-04-17 16:56:24作者: ImreW

一、过程

1.DNS解析

浏览器进行DNS域名解析,得到对应的IP地址

2.TCP三次握手

根据这个IP,找到对应的服务器建立连接(三次握手)

3.发起HTTP请求

建立TCP连接后发起HTTP请求(一个完整的http请求报文)

4.服务器响应HTTP请求

服务器响应HTTP请求,浏览器得到html代码(服务器如何响应)

5.浏览器解析

浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)

6.浏览器进行页面渲染

浏览器对页面进行渲染呈现给用户

7.服务器关闭TCP连接

服务器关闭TCP连接(四次挥手)

(二)DNS解析

  1. 首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)
  2. 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存
  3. 如果还没有找到,那么尝试从 hosts文件里面去找
  4. 在前面三个过程都没获取到的情况下,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址)

DNS优化两个方面:DNS缓存、DNS负载均衡

(二)TCP三次握手

三次握手完成之后这个TCP连接就进入Established状态,就可以发起http请求了。

【问题1】:TCP 为什么需要3次握手?

2个计算机通信是靠协议(目前流行的TCP/IP协议)来实现,如果2个计算机使用的协议不一样,那是不能进行通信的,所以这个3次握手就相当于试探一下对方是否遵循TCP/IP协议,协商完成后就可以进行通信了,当然这样理解不是那么准确。

【问题2】:为什么HTTP协议要基于TCP来实现?

目前在Internet中所有的传输都是通过TCP/IP进行的,HTTP协议作为TCP/IP模型中应用层的协议也不例外,TCP是一个端到端的可靠的面向连接的协议,所以HTTP基于传输层TCP协议不用担心数据的传输的各种问题。

(三)发起HTTP请求

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。