一次完整的http请求过程是怎样的?

一个完整的HTTP过程包括建立连接、数据传输、断开连接等七个步骤。

下面哟哟来详细介绍一下每一步:

1、TCP建立连接

HTTP协议是基于TCP协议来实现的,因此首先就是要通过TCP三次握手与服务器端建立连接,一般HTTP默认的端口号为80;

2、浏览器发送请求命令

在与服务器建立连接后,Web浏览器会想服务器发送请求命令

3、浏览器发送请求头消息

在浏览器发送请求命令后,还会发送一些其它信息,最后以一行空白内容告知服务器已经完成头信息的发送;

4、服务器应答

在收到浏览器发送的请求后,服务器会对其进行回应,应答的第一部分是协议的版本号和应答状态码;

5、服务器回应头信息

与浏览器端同理,服务器端也会将自身的信息发送一份至浏览器;

6、服务器发送数据

在完成所有应答后,会以Content-Type应答头信息所描述的格式发送用户所需求的数据信息;

7、断开TCP连接

在完成此次数据通信后,服务器会通过TCP四次挥手主动断开连接。但若此次连接为长连接,那么浏览器或服务器的头信息会加入keep-alive的信息,会保持此连接状态,在有其它数据发送时,可以节省建立连接的时间;

 

 

 

 

 

一次完整的HTTP请求发生了什么?

1. 域名解析

浏览器会解析域名得到服务器IP地址

2. 发起TCP3次握手

得到服务器IP地址后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序的80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后还有可能要经过防火墙的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。

3. 建立TCP连接后发起HTTP请求

TCP3次握手后,浏览器发起了http的请求

HTTP请求报文格式,报文由3部分组成(请求行+请求头+请求体)

1、请求行:

①请求方法,GET、POST最常见,还有DELETE、HEAD、OPTIONS、PUT、TRACE。

②URL地址,它和报文头的Host属性组成完整的请求URL。

③协议名称及版本号。

2、请求头:

HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。与缓存相关的规则信息,均包含在header中

3、请求体:

它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“tuotiao.com?param1=value1&param2=value2”的方式传递请求参数。

4. 服务器端响应http请求,浏览器得到html代码

服务器端WEB程序接收到http请求后,开始处理该请求,返回给浏览器html

一些常见状态码

200:成功

301:永久重定向, Location响应首部的值仍为当前URL,为隐藏重定向

302:临时重定向,显式重定向, Location响应首部的值为新的URL

304:Not Modified 未修改,本地缓存的资源文件

404:Not Found 请求的URL资源并不存在

500:Internal Server Error 服务器内部错误

502:Bad Gateway 连接不到服务器

504:Gateway Timeout 能连接服务器,但服务器未在规定时间内给响应

5. 浏览器解析html代码,并请求html代码中的资源

浏览器拿到html文件后,解析其中的html代码,遇到js/css/image等静态资源时,向服务器端请求下载

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

浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。

自此一次完整的HTTP事务宣告完成

 

 

 

 

 

 

 

我们打开浏览器,在地址栏输入\www.wukong.com\,几秒后浏览器打开悟空问答的页面,那么这几秒钟内发生了哪些事情,我就带大家一起看看完整的流程:

解析URL

浏览器首先会对输入的URL进行验证,如果不合法的时候,那么会把输入的文字传给默认的搜索引擎,比如你只在地址栏输入“悟空问答”几个字。

如果URL通过验证,那么可以解析得到协议(http或者https)、域名(wukong)、资源(首页)等信息。

DNS查询

  • 浏览器会先检查域名信息是否在缓存中。

  • 再检查域名是否在本地的Hosts文件中。

  • 如果还不在,那么浏览器会向DNS服务器发送一个查询请求,获得目标服务器的IP地址。

TCP封包及传输

这时候浏览器获得了目标服务器的IP(DNS返回)、端口(URL中包含,没有就使用默认),浏览器会调用库函数socket,生成一个TCP流套接字,也就是完成了TCP的封包。

TCP封包完成之后,就可以传输了,在完成“你瞅啥”,“瞅你咋地”,“来,过来唠唠”一系列操作之后,浏览器和服务器就完成了TCP的三次握手,建立了连接,后面就可以请求服务器资源了。

服务器接收请求并相应

  • HTTP有很多请求方法,比如:GET/POST/PUT/DELETE等等,我们浏览器输入URL这种,是GET方法。

  • 服务器接收到GET请求,服务器根据请求信息,获得相应的相应内容。例如我们输入的是:\www.wukong.com\,那么意味着访问首页文件。

浏览器解析并渲染

浏览器从服务器拿到了想要访问的资源,大多数时候,这个资源就是HTML页面,当然也可能是一个其他类型的文件。

  • 浏览器先对HTML文档进行解析,生成解析树(以DOM元素为节点的树)。

  • 加载页面的外部资源,比如JS、CSS、图片。

  • 遍历DOM树,并计算每个节点的样式,最终完成渲染,变成我们看到的页面。

这次请求响应之后,会断开连接,就这样,完成了一次HTTP的请求。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值