有没有这种场景:当你被问起某一项知识点时,你大脑里想起经常看到过这样的问题,可是具体是怎么样就是说不清楚。

好吧,我就是这样的,于是整理一下,实在记不住,以后找起来也方便。

当你在浏览器地址栏里输入一个网址,比如:https://www.zhihu.com/,

我们就会看到知乎的首页。实际上背后的经过,是酱紫的。

一、浏览器解析输入的网址

首先,浏览器会解析我们输入的网址,那么https://www.zhihu.com/的域名是由什么组成的?

1.http

通常被译为超文本传输协议。不过我看书上说这种其实不严谨,严谨的翻译应该是“超文本转译协议”,不过我们不纠结这个,就知道是“超文本传输协议”就好了。这种协议用于客户端和服务端之间的通信。比如,你的浏览器就是客户端,而知乎的服务器就是服务端。

但是http本身有许多缺点:

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

其实也不仅是http协议,只要是未加密的协议都存在这种问题。

为了有效的防止这些问题,于是https诞生了。https=http+加密+认证+完整性保护。

具体不铺开了,推荐大家看一下《图解http》这本书,我这里也是借鉴于它。

2. www

World Wide Web,万维网。

CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想。

最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的 WWW(World Wide Web,万维网)。

WWW 这一名称,是 Web 浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web。

www与后面的zhihu.com一起构成了一个域名地址。

3. 解析域名

其实每个地址后面都有对应的ip地址,在真正发起请求之前,还需要进行DNS解析,解析出zhihu.com背后的ip地址是什么。

二、浏览器向服务器发起TCP连接,经历”三次握手”

在浏览器和服务器之间进行http请求,发送和返回这一来一去当中,是需要去创建一个TCP连接的。

因为http是不存在连接这么一个概念的,它只有一个请求和响应这么一个概念,那么请求和响应都是一个数据包,它们之间是需要一个传输的通道的,那么这个传输的通道在哪里呢?就在TCP里面。

TCP处于传输层,提供可靠的字节流服务。TCP协议为了更容易的传输大数据,会把数据进行分割,并且能够确认数据最终是不是送到了对方那里。

那如何能保证数据成功送达对方呢?“三次握手”就是保障通信可靠性的手段之一,顺序依次为:

  • 第一次握手:发送端发送带有SYN标志的数据包给对方。
  • 第二次握手:接收端接受到数据包后,回传一个带有SYN/ACK标志的数据包,表示已经收到了。
  • 第三次握手:发送端收到接收端的响应后,会再次回传一个带有ACK标志的数据包给接收端,结束。

    再借用下书里的图片加以解释一下,是不是更容易记住了。

我们也可以用wireshark来抓包看一下,在http请求之前是不是真的进行了TCP“三次握手”。(注:wireshark的用法还请感兴趣的小伙伴自行查阅)



以这个http请求为例,可以看到,在http之前是有3次TCP连接的。在TCP连接中,从上到下依次是按照上方介绍的“握手”顺序,握手完成后,才进行http请求。

三、握手完成,浏览器和服务器之间进行http请求交互

浏览器向服务器发送http请求,请求数据包,服务器处理收到的请求,将数据返回至浏览器。

四、浏览器解码服务器的响应

浏览器解码服务器的响应,如果响应支持缓存的话,浏览器就会存入缓存中去。那网页里通常还有各种图片呀,css,js等各种资源,浏览器则会发送对应的请求去获取这些被内嵌在html的资源。

五、页面渲染

各种资源浏览器都拿到了,那就可以在客户端里渲染出来了,丰富内容的网页最终呈现在我们面前。

听过N次还是不会之:浏览器输入url后到底经历了什么的更多相关文章

  1. JS 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求: 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  2. 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那 ...

  3. 监听用户的后退键,解决部分浏览器回退的bug

    监听用户的后退键,解决部分浏览器回退的bug $(document).keydown(function (event) { // 监听backspace键 if (event.keyCode == 8 ...

  4. 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  5. JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { alert(" ...

  6. input输入完成后监听

    clearTimeout(serachtimer); serachtimer=setTimeout(function(){ xxxxxxx //这里写处理的方法 },1000)

  7. 试试监听输入框的值 (eq:在未输入前,按钮为灰色,输入内容后,按钮变蓝色)

    参考网址:https://blog.csdn.net/tel13259437538/article/details/78927071

  8. asp.net请求响应模型原理随记回顾

    asp.net请求响应模型原理随记回顾: 根据一崇敬的讲师总结:(会存在些错误,大家可以做参考) 1.-当在浏览器输入url后,客户端会将请求根据http协议封装成为http请求报文.并通过主sock ...

  9. 2019 面试准备 - JS 防抖与节流 (超级 重要!!!!!)

    Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 你们的 star 是我学习的动力!GitHub 地址 本文涉及知识点: 防抖与节流 重绘与回流 浏览器解析 URL DNS 域名解析 ...

随机推荐

  1. 【NOIP2015】斗地主 题解(DFS+贪心)

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: ...

  2. 文字识别还能这样用?通过Python做文字识别到破解图片验证码

    前期准备 1. 安装包,直接在终端上输入pip指令即可: # 发送浏览器请求 pip3 install requests # 文字识别 pip3 install pytesseract # 图片处理 ...

  3. e分钟带你利用Python制作词云图

    随着大数据时代的来临,数据分析与可视化,显得越来越重要,今天给小伙伴们带来一种最常见的数据可视化图形-词云图的制作方法. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法 ...

  4. webgl实现发光线框(glow wireframe)效果

    在之前这篇文章, WebGL 单通道wireframe渲染 我们介绍了webgl如何实现单通道wireframe的效果. 本篇文章就是在此技术原理基础之上,来实现发光的wireframe效果. 要实现 ...

  5. 微信小程序多列选择器

    wxml <picker mode="multiSelector" bindchange="bindMultiPickerChange2" bindcol ...

  6. 【LeetCode/LintCode】 题解丨微软面试题:大楼轮廓

    水平面上有 N 座大楼,每座大楼都是矩阵的形状,可以用一个三元组表示 (start, end, height),分别代表其在x轴上的起点,终点和高度.大楼之间从远处看可能会重叠,求出 N 座大楼的外轮 ...

  7. 【Linux】zookeeper-3.5.6最新版安装攻略,以及安装问题汇总

    第一步下载:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.6/ 浏览器打开这个地址下载我们需要的安装包 apa ...

  8. MySQL数据库——连接查询

    1.基本含义 连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”. 实际上,两个表的完全的连接是这样的一个过程: 左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后所得到的所有 ...

  9. leetcode刷题笔记-1. 两数之和(java实现)

    题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使 ...

  10. C#LeetCode刷题之#202-快乐数(Happy Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3856 访问. 编写一个算法来判断一个数是不是"快乐数& ...