目录

1、浏览器解析url

2、DNS域名解析

3、浏览器获取端口号

4、TCP建立连接

5、发送HTTP请求

6、服务器处理请求

7、返回响应结果

8、关闭TCP连接

9、浏览器加载解析渲染


先概括一下整个过程:

首先,浏览器向本地DNS服务器发送请求,如果本地没有缓存该域名的IP地址,就需要通过递归或迭代的方式向根域名服务器、顶级域名服务器、权威域名服务器发起查询请求,直至返回一个IP地址给浏览器。然后根据该IP地址建立TCP连接,客户端发送HTTP请求,服务器返回报文,关闭TCP连接,再由浏览器进行解析渲染页面,最后TCP四次挥手结束连接(404:服务器找不到请求的页面)

应用层:DNS、HTTP、HTTPS

传输层:TCP

网络层:IP、ARP

1、浏览器解析url

浏览器会对我们输入的url进行解析,主要将其分为下部分:协议、网络地址、资源路径。其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号;协议是从该计算机获取资源的方式,常见的是HTTP,HTTPS,FTP等。不同协议有不同的通讯内容格式;资源路径指示从服务器上需要获取资源的具体路径。

这里浏览器对输入的url解析为如下内容:
url:https://mp.csdn.net/mp_blog/creation/editor/119778557
协议:https
网络地址(网站名):mp.csdn.net
资源路径:/mp_blog/creation/editor/119778557

2、DNS域名解析

客户端收到你输入的域名地址后,它首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有,再去找DNS服务器。一般用户很少去编辑修改hosts文件。
可以理解ip是你家的具体住址 如南京市建邺区吉庆家园04栋603室

DNS服务器层级如下:

DNS查询的具体步骤如下:
a、从浏览器缓存中查询。浏览器会存储一定时间的DNS记录,操作系统不会告诉浏览器每个DNS记录的保存时限,不同浏览器设置保存时限为一个固定值(不同浏览器情况不同,一般在2-30分钟)。

b、从操作系统缓存中查询。如果浏览器中没有包含想要的缓存记录,那浏览器就会发起操作系统请求,继续查询操作系统缓存

c、从路由器中查询DNS缓存。请求持续发送到你的路由,它通常会有自己的DNS缓存。

d、从ISP中查询DNS缓存。下一个被查询地方是ISP缓存DNS的服务器。

e、域名服务器迭代查询,根据返回的地址逐级向上查询。首先从root域名服务器中查询如.com域名服务器,然后逐步向前查询,.com顶级域名服务器到ruanyifeng的域名服务器。一般来说,.com级别的都已经在缓存中了,所以一般不会进行对root域名服务器的查询。下面给出一张迭代查询的图。

浏览器客户端向本地DNS服务器发送一个含有域名https://mp.csdn.net的DNS查询报文。
本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。
本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其https://mp.csdn.net后缀并用负责该域名的权威DNS服务器的IP地址作为回应。
最后,本地DNS服务器将含有https://mp.csdn.net的IP地址的响应报文发送给客户端。
从客户端到本地服务器属于递归查询,而DNS服务器之间的交互属于迭代查询。
正常情况下,本地DNS服务器的缓存中已有comDNS服务器的地址,因此请求根域名服务器这一步不是必需的。

3、浏览器获取端口号

知道ip地址后,还需要端口号,这样才能知道具体在603室的哪个房间里。http协议默认端口号是80。

4、TCP建立连接

IP和端口都有了,在http消息发送前,需要建立客户端与服务器的TCP链接,也就是进行所谓的三次握手。

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,
等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,
TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP三次握手的过程如下:

a、客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

b、服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

c、客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

5、发送HTTP请求

经过三次握手之后,与服务器建立了连接后,就可以向服务器发起请求了。

6、服务器处理请求

请求到达服务器之后,接下来服务器需要响应浏览器的请求。服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。下面以静态渲染的页面为例,ajax渲染不需要在服务器做页面数据写入

7、返回响应结果

在HTTP里,有请求就会有响应,哪怕是错误信息。这里我们同样看下响应报文的组成结构:

在响应结果中都会有个一个HTTP状态码,比如我们熟知的200、301、404、500等。通过这个状态码我们可以知道服务器端的处理是否正常,并能了解具体的错误。
状态码由3位数字和原因短语组成。根据首位数字,状态码可以分为五类:

8、关闭TCP连接

为了避免服务器与客户端双方的资源占用和损耗,
当双方没有请求或响应传递时,任意一方都可以发起关闭请求。

建立一个连接需要三次握手,而终止一个连接要经过四次挥手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。

(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

9、浏览器加载解析渲染

详解浏览器解析一个URL的全过程相关推荐

  1. 详解浏览器打开一个页面的过程

    前言:在讲解浏览器打开页面过程之前,我们先了解下浏览器进程线程,这些知识点都是必要的铺垫 线程与进程 首先要说明的就是进程与线程的关系,这个只是大概讲一下不必深入的导论,如果想在服务端方面做深入研究的 ...

  2. 详解浏览器缓存 前端开发必会

    详解浏览器缓存 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一个数据请求来 ...

  3. 详解HTTP的文件上传全过程(RFC1867协议)

    详解HTTP的文件上传全过程:RFC1867协议 HTTP请求头 HTTP请求体 什么是 multipart/form-data 上传文件信息的内容组成 原生Node实现客户端上传文件 原生Golan ...

  4. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  5. java cache-control_详解浏览器Cache-Control缓存策略

    原来用的是 Expires 策略,浏览器可以直接从浏览器缓存读取数据,而无需再次请求,它的值对应一个 GMT,来告诉浏览器资源缓存过期时间,如果还没过该时间点则不发请求. 例如下面的例子,这是京东的首 ...

  6. 【计算机网络漫游】浏览器输入一个URL后发生了什么

    浏览器输入一个URL之后发生了什么?这个问题一直是一个非常经典的问题,透过这个问题,我们可以从数据包的角度,自顶向下 (也可以自底向上) 地理解计算机网络各层发生的事情,同时也是一个面试的热点问题.但 ...

  7. 详解浏览器的事件系统

    详解浏览器的事件系统 一.事件 二.事件类型 三.事件对象 四.事件流 五.注册事件 一.事件 意义:JavaScript 与 HTML 之间的交互是通过事件完成的.通俗点说事件是实现浏览器与用户交互 ...

  8. php xml 实例教程,php解析xml方法实例详解,解析xml实例详解_PHP教程

    php解析xml方法实例详解,解析xml实例详解 本文以实例形式详细讲述了php解析xml方法.分享给大家供大家参考.具体分析如下: books.xml文件如下: Harry Potter J K. ...

  9. 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...

    [索引页] [×××] 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 作者:webabcd 介绍 Silverlight 2.0 ...

最新文章

  1. python读取xml文件报错ValueError: multi-byte encodings are not supported
  2. guava cache简单学习笔记
  3. Objective-C字符串处理的函数
  4. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(二)
  5. 网络请求的基本知识《极客学院 --AFNetworking 2.x 网络解析详解--1》学习笔记...
  6. 阿里巴巴数据分析沙龙 杭州站圆满召开
  7. Jamie and Tree[CF916E]
  8. 怎样自动提取邮件的内容_这些最新的外贸搜索开发工具(图灵搜、谷歌搜索提取工具、易查查),你会使用吗?...
  9. java mongodb gridfs_查询MongoDB GridFS元数据(Java)
  10. 用 TigerVNC 实现 Linux 远程桌面
  11. 数据同步框架MS Sync Framework-不同场景使用例子和简要分析
  12. Python使用XGBoost
  13. 网络电话坐享iOS10红利 iphone7免费通话
  14. IDEA SpringBoot多模块项目搭建详细过程(转)
  15. java使用itext7生成pdf
  16. Xposed 之旅 -- 微信防撤回
  17. ActiveX控件原理及手动修改
  18. 原子结构示意图全部_所有原子结构示意图
  19. ubuntu从源码编译安装python
  20. matlab subs eval,【荐】MATLAB求解符号表达式数值的方法:subs函数

热门文章

  1. ubuntu添加dvd光盘源
  2. 春天尚远,体育场馆预定平台距离成功彼岸还有多远?
  3. Upma Xmac 测试 03
  4. Javascript模块化编程require.js的用法
  5. 腾讯云数据库团队:MySQL5.7 JSON实现简介
  6. SpringMvc 集成 shiro 实现权限角色管理-maven
  7. 提升网络可靠性的双网卡绑定7种模式
  8. 二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】
  9. 视频格式转换工具使用
  10. hdu 3954(线段树区间更新)