总的来说分为以下过程:

  1. DNS解析
  2. TCP三次握手
  3. 发送HTTP请求
  4. 服务器端处理请求并返回HTTP保文
  5. 浏览器渲染页面
  6. 断开连接: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输入到页面展示都发生了什么?的更多相关文章

  1. 从URL输入到页面展现到底发生什么?

    目录 前言 一.URL 到底是啥 二.域名解析(DNS) 1.IP 地址 2.什么是域名解析 3. 浏览器如何通过域名去查询 URL 对应的 IP 呢 4. 小结 三.TCP 三次握手 1.TCP 三 ...

  2. 经典面试题:从 URL 输入到页面展现到底发生什么?

    前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 本文首发地址为GitHub 博客,写文章不易,请多多支持与关注 ...

  3. 从URL输入到页面展现到底发生什么

    前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解!   从URL输入到页面展现 总体来说分为以下几个过程: DNS ...

  4. 从URL输入到页面展现到底发生什么?DNS 解析&TCP 连接

    DNS 解析:将域名解析成 IP 地址 TCP 连接:TCP 三次握手 发送 HTTP 请求 服务器处理请求并返回 HTTP 报文 浏览器解析渲染页面 断开连接:TCP 四次挥手 一.什么是URL? ...

  5. 【原】老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...

  6. 【转】老生常谈-从输入url到页面展示到底发生了什么

    今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...

  7. (转)老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索"从输入url到页面展示到底发生了什么",你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么 ...

  8. 转载--从输入URL到页面展示到底发生了什么

    最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...

  9. 从输入url到页面展示到底发生了什么

    阅读目录 1.输入地址 2.浏览器查找域名的 IP 地址 3.浏览器向 web 服务器发送一个 HTTP 请求 4.服务器的永久重定向响应 5.浏览器跟踪重定向地址 6.服务器处理请求 7.服务器返回 ...

随机推荐

  1. vue 做登陆页面 ( 登陆成功后去掉注册和登陆按钮 显示用户名)

    1.当登陆成功  显示用户名且去掉登陆和注册按钮 2.data里声明  后  就在登陆的方法里调用啦 下面说一下登陆的方法. 1.登陆的按钮代码在第一张图片里 2.登陆的弹出框 3.方法 ps:另一种 ...

  2. poj 1258 Agri-Net 解题报告

    题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 ...

  3. JSON详解+ C# String.Format格式说明+ C# ListView用法详解 很完整

    JSON详解 C# String.Format格式说明 C# ListView用法详解 很完整

  4. async-await系列翻译(一)

    本篇翻译的英文链接:https://docs.microsoft.com/en-us/dotnet/articles/standard/async-in-depth 使用.NET的基于任务的异步编程模 ...

  5. 「LuoguP1281」 书的复制(贪心

    Description 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. // 现在要把m本有顺序的书分给k给人 ...

  6. Linux下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again。

    错误如下: Ignoring required pre-requisite failures. Continuing... Preparing to launch Oracle Universal I ...

  7. RobotFramework:App滑动屏幕

    转自:http://blog.csdn.net/jgw2008/article/details/77993399 在使用Robot Framework测试Android机器过程中, 经常要用到滚屏操作 ...

  8. Vue中devtools安装使用

    vue.js的devtools安装 安装 1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载好后进入vue-devtools-master工 ...

  9. python之路,day7-面向对象变成

    本篇内容: 面向对象.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法: #@staticmethod只是名义上归类管理,实际上跟类没什么关系 ...

  10. Sublime Text 常用的16 个 Sublime Text 快捷键

    在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. ...