一次Web请求的过程(HTTP协议的工作流程)

一次Web请求的过程(HTTP协议的工作流程)

1. 总览

在浏览器输入url ——> DNS域名解析 (得到主机的IP地址) ——> 建立TCP连接(三次握手)—— > 发送HTTP Request ——> Web服务器(Nginx反向代理) ——> 应用服务器Servlet处理请求 ——> 关闭TCP连接(四次握手)——> 渲染响应页面
  1. 浏览器通过DNS把域名解析成对应的IP地址
  2. 根据这个IP地址在互联网上找到对应的服务器,建立Socket连接
  3. 客户端服务器发送HTTP协议请求,请求服务器里的文档资源
  4. 在服务器端,实际上还有复杂的业务逻辑:服务器可能有多台,到底指向哪台服务器处理请求,这需要一个负载平衡设备来平均分配所有用户的请求
  5. 还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里;
  6. 当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如:css,js或者图片)时又会发起另外的请求,而这些请求可能会在CDN上,那么CDN服务器又会处理这个用户的请求。
  7. 客户端与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。

一个 HTTP 事务就是这样实现的,看起来很简单,原理其实是挺负责的。需要注意的是客户机与服务器之间的通信是非持久连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。

但需要注意的是,从 HTTP 1.1 开始,服务器可以与客户端保持长连接,不一定是请求完成后就断开连接,这取决于服务器的操作。

2. DNS域名解析

域名这个东西其实是为了方便人类使用的,但是对计算机来说,是很难理解的。

DNS(Domain Name System)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网

DNS映射解析流程:

  1. 查找浏览器本地缓存(之前访问过某个网站,记住了这个域名和IP地址的映射关系)
  2. 操作系统的缓存(操作系统可能也会缓存域名和IP地址的映射关系)
  3. host文件(host文件中可能设置了相应的映射关系,比如localhost <—> 127.0.0.1)
  4. 域名服务器发起请求(由网络供应商提供)

3. TCP连接(三次握手)

TCP协议就是面向连接的可靠的基于字节流的传输(传输层)。

连接:双方开辟了资源缓冲区(这个资源并不是应用程序无关,而是由操作系统内核开辟。双方可能走了不同路径,途径不同的网线,服务中转器,路由器等)

只有双方都开辟了资源缓冲区才有了连接的感觉。

三次握手:

第一次: C —syn—> S

第二次:S —syn、ack—> C

第三次:C —ack—> S

为什么是三次,而不是两次?

首先,通信是双向的,而客户端会有输入流、输出流,当经过两次连接后,可以确定客户端的输入和输出是通的,但是站在服务端,经过两次连接后,可以确认输入是通的,但无法确认服务端的输出是否是通的,所以还要进行第三次连接。

Socket(套接字):

四元组

ip+port : ip+port

(客户端ip+端口号 : 服务端ip+端口号)

IP—>找到主机,端口号---->找到哪一个进程(程序)

唯一表示不同主机之间的两个程序

每个主机的端口号个数:65535(一般0~1024端口不推荐使用,80端口为监听端口)

4. 发起HTTP请求

HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

http协议通俗的讲就是权威机构制定的规则、章程,需要去遵守,具体的体现就是发送的时候你需要遵循什么样的格式,响应的时候你需要遵循什么样的格式。

http协议其实就是用来规范http请求和http响应的。

5. 经过ip层

根据目标地址ip,向下经过链路层传输出去,在网络上一边中转一边传输

6.到达目标机器之后,经过ip层,tcp层,到达应用层

7.服务器来解析请求报文

为什么可以解析成功呢?,协议里面已经规定了,应该有什么,应该什么样),请求的是什么资源

8. 服务器处理请求

服务器知道了你请求的是一个html页面,那么接下来,按照http协议的要求,去构建一个http响应,再次经过tcp、ip,链路层传输出去,网络上中转传输,到达客户端

9. 响应

客户端拿到http响应报文,渲染呈现出我们看到的html页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值