一个完整的HTTP请求过程

目录

  • 交互流程
  • 域名解析
  • 与服务器建立连接
    • OSI七层模型
    • TCP/IP四层模型
    • 五层体系结构
    • 三种模型结构
  • 数据在各层之间的传递过程
  • 服务器响应HTTP请求, 浏览器得到html代码
  • 浏览器解析html代码,并请求html代码中的资源(如js、css、图片)
  • 浏览器对页面进行渲染呈现给用户

1. 交互流程

  1. 域名解析
  2. 与服务器建立连接
  3. 服务器响应HTTP请求, 浏览器得到html代码
  4. 浏览器解析html代码,并请求html代码中的资源(如js、css、图片)
  5. 浏览器对页面进行渲染呈现给用户

2. 域名解析

以Chrome浏览器为例

  1. 首先搜索浏览器自身的DNS缓存

  2. 搜索操作系统自身的DNS缓存

  3. 读取hosts文件(位于C:\Windows\System32\drivers\etc)

  4. 向DNS服务器获取ip地址

如果经过以上的4个步骤,还没有解析成功,那么会进行如下步骤(以下是针对Windows操作系统):
5. 操作系统就会查找NetBIOS name Cache(凡是最近一段时间内和我成功通讯的计算机的计算机名和Ip地址,就都会存在这个缓存里面)
6. 那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)
7. 那么客户端就要进行广播查找
8. 就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)

如果第八步还没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。只要这八步中有一步可以解析成功,那就可以成功和目标计算机进行通信

3. 与服务器建立连接

3.1 OSI七层模型

网络模型作用对应的网络协议
应用层是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务HTTP TFTP FTP NFS SMTP
表示层可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取Telnet SNMP
会话层通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求SMTP DNS
传输层定义了一些传输数据的协议和端口号(WWW端口80等)TCP UDP
网络层在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择IP ICMP ARP
数据链路层定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输FDDI PDN SLIP PPP
物理层主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流IEEE 802.1A IEEE 802.2到IEEE 802.11

3.2 TCP/IP四层模型

  • 应用层
  • 运输层
  • 网际层
  • 网络接口层

3.3 五层体系结构

  • 应用层
  • 运输层
  • 网络层
  • 数据链路层
  • 物理层

3.4 三种模型结构

三种模型结构

3.5 数据在各层之间的传递过程

七层网络传输

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

这个不同的系统架构,内部流程不同,后面补充

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

浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以从下图看出,这里显示的顺序并不一定是代码里面的顺序

浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。

详细的浏览器工作原理请看:http://kb.cnblogs.com/page/129756/

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

参考链接:
https://blog.csdn.net/LRH0211/article/details/72724361
https://blog.csdn.net/qq_22238021/article/details/80279001


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个完整HTTP请求包括以下几个部分: 1. 起始行:起始行包括请求方法、请求的URL和使用的协议版本。例如,GET /index.html HTTP/1.1。 2. 头部信息:头部信息包括一系列的键值对,用来传递请求的附加信息。常见的头部信息包括User-Agent(用户代理,用于标识浏览器或客户端)、Host(请求的主机名)、Content-Type(请求体的类型)等。 3. 空行:空行用于分隔头部信息和请求体。 4. 请求体:请求体包含了请求的具体内容,例如表单数据或上传的文件。 综上所述,一个完整HTTP请求的格式为: 起始行 头部信息 空行 请求体 引用\[1\] #### 引用[.reference_title] - *1* *3* [一完整的HTTP事务是怎样的过程](https://blog.csdn.net/wang35235966/article/details/77863455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [一次完整http请求过程](https://blog.csdn.net/weixin_48520816/article/details/125406258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值