浏览器是我们日常都会用的一个软件,那么,当你向浏览器的地址栏输入一个地址(URL)时,它背后究竟发生了哪些故事呢?

浏览器检查地址

1 检查地址的有效性

对于浏览器来说,一般可以支持两种地址的输入:IP(192.xxx.xxx.xxx)直接访问和通过域名(www.xxx.com)访问。在你输入一个地址后,浏览器最先做的就是检查你的地址是否“合法”。譬如,用IP的时候有超过255的数字、域名中有非法字符等。只有当你正确输入一个地址,浏览器才会按照你的指令进行以下步骤。否则,(现在的)浏览器会认为你想在搜索引擎中搜索这段字符串。

2 检查访问方式(http or https)

假设你已输入正确,此时浏览器会检测你的访问方式。访问方式有HTTP和HTTPS两种,区别如下:

  • https是http协议的安全版本,http协议的数据传输是明文的,是不安全的;https使用了SSL/TLS协议进行了加密处理,需要先建立SSL加密通道再进行通信,有效防止不安全访问。
  • http和https使用连接方式不同,默认端口也不一样,http是80,https是443。

由于http的明文传输机制安全性很差,因此大部分网站现已转为https。但如果你不指定明确的访问方式,浏览器依旧会默认使用http进行访问。为了能使你顺利到达https的访问通道,网站开发者想出了下图的办法让你的http访问转化成https访问,即当你请求80端口时,服务器会返回一条重定向至443端口的信息,让你的浏览器重新请求443端口。

此时问题来了,你和服务器之间出现了坏人!(他甚至可能是你的网络运营商,如果真是的话https拿他也经常没得办法咯)他可能通过路由劫持、DNS劫持等方式劫持了你的网络,比如劫持了你的80端口,就会出现下图中的“中间人劫持攻击”。坏人可以根据他的目的,在原网页中植入广告、钓鱼网站等不良信息,再发送给你的浏览器。

一种常用的解决方案是使用HTST,在此不再详述。读者请自行搜索了解。

3 其他检查

除了上述检查,浏览器还会进行一些额外的操作,比如安全检查、访问限制(比如某些网站emmmm)。

4 浏览器缓存

最后,浏览器将检查自己的缓存情况,来决定下一步的行为,如图所示。其中要注意的是,RFC 规定,如果 ETag 和 Last-Modified 都有,则必须一次性都发给服务器,没有优先级。如果服务器输出了 ETag,没有必要再输出 Last-Modified。

ETag是LastModifed的补充,有些动态生成的内容就可以用md5做ETag控制缓存了。ETag比lastModified更加严谨,如果资源发生变化,ETag就会发生变化,就会把最新的资源给客户端返回去,而LastModified不识别s(秒)单位里的修改,所以如果资源在s(秒)单位里发生了修改,那LastModified也不会发生改变,这样如果只用了LastModified,客户端得到的资源就不是最新的;但是设定了ETag之后,每次客户端发出请求,服务端都会根据资源重新生成一个ETag,对性能有影响。

ETag只在特定情况下才更有用,比如同一url的资源在不同条件下返回不同的内容。而现实中一般会通过各种方法来避免这样的情况出现,因为这样容易消耗更多资源。相比而言,LastModified一般情况下一般足够,且LastModified更快,并且是web服务器自动支持的。因此默认使用LastModified,有需要的情况下才用ETag

当你在浏览器中输入一个地址(一)——浏览器检查地址相关推荐

  1. c++软件开发面试旋极面试题_经典软件开发面试题:浏览器中输入一个网址后发生了什么?...

    经典软件开发面试题:浏览器中输入一个网址后发生了什么? ​ 大家好, 这一期呢,我们来谈一个经典的面试题.这种题目是在浏览器中输入一个网址以后, 会显示一个网页,这期间到底发生了什么? 答案要求说的越 ...

  2. 在浏览器中输入一个域名之后都发生了什么

    当你在浏览器中打入www.baidu.com后,轻轻一敲回车百度输入框就展现在你面前,我们看似很简单很简单的一个操作,背后却有着超级复杂的过程. 其实网络传输跟我们平常说话有许多相似的地方,大脑组织语 ...

  3. 当在浏览器中输入一个域名后,会发生什么

    今天,去哪儿网Geely老师分享了他在校招时的一个面试题:当输www.qunar.com时发生了什么.(真不是做广告哈) 因为学的并没有很扎实,不能更深更广的分析这个问题,遂---百度一下,发现这篇文 ...

  4. 当我们在浏览器中输入一个URL后,发生了什么?

    写在开头:这篇文章被我归入博客性能优化类别,是因为我认为如果我们要优化网站性能.提升用户体验,首要目标就是要知道用户在本地请求并加载你的网页的过程中,到底发生了什么,在此基础上我们才能更好的优化网页. ...

  5. 在浏览器中输入网址后的流程

    1.浏览器发起DNS查询请求 在广域网中是基于IP地址进行通信的.但通常客户访问的是一个网址,为此需要先得到网址对应的IP地址,这就需要域名服务系统将域名转换成IP地址.在客户端浏览器中输入网址时,浏 ...

  6. 在浏览器中输入URL并回车后都发生了什么?

    1.解析URL ________________________________________________________________________ 关于URL: URL(Universa ...

  7. 从输入一个网址到浏览器显示页面经历的全过程(网络开篇)

    作为网络专栏的开篇导文,本文概况介绍下经典案例:从输入一个网址到浏览器显示页面的全过程. 步骤概要介绍如下: 1.输入网址 2.DNS解析获取域名对应的IP地址 3.建立TCP连接 4.web浏览器向 ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之计网_Part_2(在浏览器中输入www.baidu.com后执行的全部过程、DNS的域名<->IP地址、OS协议栈的样子、CDN)整起

    可以说计算机网络,就是玩那几层中的那些协议们,本层玩,本层玩完了跨层玩,跨层玩,跨层玩完了本层玩- PART1:在浏览器中输入网站网址后执行的全部过程? 0.服务器在 80 端口等待客户的请求. se ...

  9. 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3

    备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...

最新文章

  1. 网络广告推广浅析网站中的关键词密度要如何控制呢?
  2. python整数类型-Python 的数值类型(整数、长整数、浮点数和复数)
  3. 文巾解题 100. 相同的树
  4. Ext JS 4.1.1 RC2发布
  5. windows update失败还原更改,无法开机
  6. OS- -操作系统概念
  7. idea部署springboot项目到外部tomcat
  8. LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)
  9. string matching(HDU-6629)
  10. iostat linux,iostat 命令详解
  11. 如何成为一个优秀的测试工程师?必备的9大职业素质盘点
  12. 关于 FleaPHP
  13. 二维点集求外轮廓Java_从二维点集重建平面形状-浅议凹包算法
  14. 数据库系统实践 IV 查询插入修改删除操作
  15. bus_dev_drv 模型
  16. 绝密!!!!!明星的身份证照片!!!!
  17. 孤狼电商店群全套教程:店群基础+2.0精细化蓝海+深度蓝海+裂变课程2.0
  18. 2022-2-3 牛客C++项目 —— 生产者消费者模型(条件变量、信号量)
  19. php判断是否是特殊字符如emoji表情
  20. 引导系统工具 Clover配置文件参数说明书 (SMBIOS)

热门文章

  1. 软银已跌下神坛?回顾10年财务数据,看软银的挫折与险途
  2. mysql导入复杂excel表格,较复杂的excel表格导入数据库oracle或mysql《》
  3. 二十八 我在软件园的那些日子里
  4. UI设计师为什么这么重要
  5. 10个匿名浏览网页的隐私保护工具,程序员必备!
  6. “小毛驴”BT 家庭存储共享系统
  7. 微信生鲜小程序运营技巧 临沂修齐网络专业开发生鲜水果商城小程序
  8. 联想笔记本怎么录屏,4个笔记本电脑录屏的方法
  9. Revit做基坑放坡开挖方法及快速生成基坑
  10. 什么是社群经济新商业?2019最火爆的生意都靠它