从URL输入到页面展示都发生了什么?
总的来说分为以下过程:
- DNS解析
- TCP三次握手
- 发送HTTP请求
- 服务器端处理请求并返回HTTP保文
- 浏览器渲染页面
- 断开连接:TCP的四次挥手
URL到底是什么?
URL(Uniform Resource Locator),统一资源定位符,用户定位互联网上资源,俗称网站。
语法规则:scheme://host.domain.port/path/filename
schme:定义因特尔互联网服务的类型。常见协议有 http,https,ftp,file。
host:定义域主机(http 默认主机是 www)
域名解析(DNS)
DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。DNS是一个网络服务器,我们的域名简单来说就是在DNS上记录一条信息记录。
如何通过域名去查询URL对应的IP呢?
浏览器缓存:浏览器会按照一定频率缓存DNS记录。
操作系统缓存:如果在浏览器缓存中没有找到,那就会去操作系统中找。
ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS的查询请求。
根服务器:如果ISP的DNS服务器还没找到,就会向根服务器发送请求,进行递归查询(DNS服务器先问根域名服务器 .com域名服务器 的IP地址,然后再问.baidu 域名服务器,依次类推)
TCP三次握手
在客户端发送请求之前,会发送TCP三次握手用以同步客户端和服务端的序列号和确认号,并交换TCP窗口大小信息。
第一次握手,由浏览器发送请求,告诉服务器我要发送请求了。
第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发吧。
第三次握手,由浏览器发送,告诉浏览器,我马上要发了,你准备接受吧。
为什么需要三次握手?
“为了防止已失效的连接请求报文突然又传送到了服务端,因而产生错误” -- 谢希人《计算机网络》
发送HTTP请求
TCP三次握手结束后,开始发送HTTP请求报文。
请求报文由 请求行(request line)、请求头(header)、请求体
请求行包含请求方法、URL、协议版本
请求方法包含8种:GET、POST、PUT、DELETE、TRACE、OPTIONS、HEAD、PATCH
URL:即请求地址,由 协议://主机:端口/路径?参数 组成。
协议版本即http版本号
POST /app/bscron/baseext.html?AppID=5211394&ajax=json&r=0.6853821113886356 HTTP/1.1
请求头包含请求的附加信息,由关键字、值对组成,每行一对,关键字和值用英文冒号:分割。
请求头部通知服务器有关客户端请求的信息。它包含许多有关的客户端环境和请求正文的有用信息。
Connection: keep-alive
Content-Length: 34
Accept: */*
Origin: http://app.huicui.me
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://app.huicui.me/app/bscron/edit.html?AppID=5211394&id=100153
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: UM_distinctid=1676d855f-0d0045fe32f2c6-35617600-1fa400-1676264dd87274; PHPSESSID=pcvbojcnb7vdo9q9mhpab1; CNZZDATA1261434238=298008907-15435792-http%253A%252F%252Fapp.huicui.me%252F%7C4440878
请求体,可以承载多个请求参数的数据,包含回车符、换行符和请求数据,并不是所有请求都具有请求数据。
AppID=123&ajax=json
服务器处理请求并返回HTTP报文
服务器,每台服务器都会安装处理请求的应用-web serve。常见的web serve 产品有 apache,nginx, IIS, Lighttpd等。
http响应报文
响应报文由响应行(request line)、响应头部(header)、响应主体组成。
响应行包含:协议版本、状态码、状态码描述
状态码规则如下:
1xx:指示信息-表示请求已接收,继续处理
2xx:成功-表示请求已被成功接收、理解、接受。
3xx:重定向-要完成请求必须进行更进一步的操作。
4xx:客户端错误-请求有语法错误或请求无法实现。
5xx:服务器端错误-服务器未能实现合法的请求。
浏览器解析渲染页面
根据HTML解析出DOM树
根据CSS解析生成CSS规则树
结合DOM数和CSS规则树,生成渲染树
根据渲染树计算每一个节点的信息
根据计算好的信息绘制页面
断开连接
当数据传送完毕,需断开TCP连接,此时发起TCP四次挥手。
第一次挥手:由浏览器发起,发送给服务器,我请求报文发送完了,你准备关闭吧。
第二次挥手:由服务器发起,告诉浏览器,我请求报文接受完了,我准备关闭了,你也准备吧。
第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完了,你准备关闭吧。
第四次挥手:有浏览器发起,告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧。
从URL输入到页面展示都发生了什么?的更多相关文章
- 从URL输入到页面展现到底发生什么?
目录 前言 一.URL 到底是啥 二.域名解析(DNS) 1.IP 地址 2.什么是域名解析 3. 浏览器如何通过域名去查询 URL 对应的 IP 呢 4. 小结 三.TCP 三次握手 1.TCP 三 ...
- 经典面试题:从 URL 输入到页面展现到底发生什么?
前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 本文首发地址为GitHub 博客,写文章不易,请多多支持与关注 ...
- 从URL输入到页面展现到底发生什么
前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 从URL输入到页面展现 总体来说分为以下几个过程: DNS ...
- 从URL输入到页面展现到底发生什么?DNS 解析&TCP 连接
DNS 解析:将域名解析成 IP 地址 TCP 连接:TCP 三次握手 发送 HTTP 请求 服务器处理请求并返回 HTTP 报文 浏览器解析渲染页面 断开连接:TCP 四次挥手 一.什么是URL? ...
- 【原】老生常谈-从输入url到页面展示到底发生了什么
刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...
- 【转】老生常谈-从输入url到页面展示到底发生了什么
今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...
- (转)老生常谈-从输入url到页面展示到底发生了什么
刚开始写这篇文章还是挺纠结的,因为网上搜索"从输入url到页面展示到底发生了什么",你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么 ...
- 转载--从输入URL到页面展示到底发生了什么
最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...
- 从输入url到页面展示到底发生了什么
阅读目录 1.输入地址 2.浏览器查找域名的 IP 地址 3.浏览器向 web 服务器发送一个 HTTP 请求 4.服务器的永久重定向响应 5.浏览器跟踪重定向地址 6.服务器处理请求 7.服务器返回 ...
随机推荐
- vue 做登陆页面 ( 登陆成功后去掉注册和登陆按钮 显示用户名)
1.当登陆成功 显示用户名且去掉登陆和注册按钮 2.data里声明 后 就在登陆的方法里调用啦 下面说一下登陆的方法. 1.登陆的按钮代码在第一张图片里 2.登陆的弹出框 3.方法 ps:另一种 ...
- poj 1258 Agri-Net 解题报告
题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 ...
- JSON详解+ C# String.Format格式说明+ C# ListView用法详解 很完整
JSON详解 C# String.Format格式说明 C# ListView用法详解 很完整
- async-await系列翻译(一)
本篇翻译的英文链接:https://docs.microsoft.com/en-us/dotnet/articles/standard/async-in-depth 使用.NET的基于任务的异步编程模 ...
- 「LuoguP1281」 书的复制(贪心
Description 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. // 现在要把m本有顺序的书分给k给人 ...
- Linux下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again。
错误如下: Ignoring required pre-requisite failures. Continuing... Preparing to launch Oracle Universal I ...
- RobotFramework:App滑动屏幕
转自:http://blog.csdn.net/jgw2008/article/details/77993399 在使用Robot Framework测试Android机器过程中, 经常要用到滚屏操作 ...
- Vue中devtools安装使用
vue.js的devtools安装 安装 1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载好后进入vue-devtools-master工 ...
- python之路,day7-面向对象变成
本篇内容: 面向对象.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法: #@staticmethod只是名义上归类管理,实际上跟类没什么关系 ...
- Sublime Text 常用的16 个 Sublime Text 快捷键
在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. ...