请问浏览器访问www.baidu.com经历了怎样的过程?
1.查找浏览器缓存
首先会查找浏览器缓存,浏览器会保存一段时间你之前访问过的网址的DNS信息,不同的浏览器保存的时长不等。
2.查找系统缓存
如果上面的步骤没有找到对应的DNS信息,这个时候浏览器会尝试调用系统缓存来继续查找这个网址对应的DNS信息。
3.查找路由器缓存
如果还是没有找到对应的IP,那么浏览器会接着发送一个请求到路由器上,然后路由器在自己的路由器缓存查找相关记录,一般路由器也存有DNS信息。
4.请求ISP DNS服务器
如果还是没有找到,那么这个请求会被发送到ISP(Internet Service Provider,即互联网服务提供商)。ISP针对DNS服务器做了修改,使得用户的浏览器自动访问到ISP已经设定好的页面上,这就是DNS污染和Http劫持,用户可以自行修改DNS来防止DNS被ISP污染,至于Http劫持,由于Http是明文通信,ISP拦截用户浏览器请求之后的Response,强行插入广告或302重定向响应来添加推广链接。用户使用Https
5.请求根域名服务器
如果在ISP的DNS服务器上还是没有找到,那么你的请求会被发向根域名服务器,根域名服务器是面向全球的顶级DNS服务器,共有A-->M13台逻辑服务器。真正的实体服务器大概有几百台,分布于全球各大洲,这些服务器拥有真正完整的DNS数据库。如果在这里还是找不到,说明了一个问题,这个域名根本不存在,或者该域名由于欠费,已经被回收了。
这也就是为什么打开一个新的页面,会有点慢的原因了。因为本地没什么缓存,需要这样一级一级的递归查询,知道DNS被解析。
域名结构:三级域名.二级域名.一级域名
6.解析过程
浏览器得到经过一系列的DNS查找之后,得到了IP。浏览器给这个IP的服务器发送了一个http请求,方式为get,这个get请求包含host、user-agent、Connection、Cookies等等
发送完请求之后,等待响应。
web服务器接收到浏览器的请求之后,开始读请求头,生成响应头和具体响应内容,响应头里有一个Status code,200、302、404等等。浏览器开始读取响应头,然后开始解析响应并开始显示页面。
如果该页面是个静态页面,基本上到这一步也就结束了,但是如果是个动态页面,在主页的框架在浏览器上加载完之后,需要继续向web服务器请求其所包含的资源,图片、视频、css样式等等。
通常来说,对于静态页面内容,浏览器通常会进行缓存。而对于动态的页面内容来说,浏览器不会缓存,缓存的内容通常也不会保存很久,因为难保网站页面不做改动。
请问浏览器访问www.baidu.com经历了怎样的过程?的更多相关文章
- 浏览器访问 www.baidu.com 的过程
浏览器访问 www.baidu.com 的过程 1 先要解析出www.baidu.com DNS域名解析为服务器 IP 2 得到 IP地址后,客户端会发起TCP请求,以及3次握手建立连接 3 建立连接 ...
- 用户从手机的浏览器访问www.baidu.com,看到的可能跟桌面PC电脑,是不太一样的网页效果,会更适合移动设备使用。请简要分析一下,实现这种网页区分显示的原因及技术原理。
手机的网速问题.屏幕大小.内存.CPU等.通过不同设备的特征,实现不同的网页展现或输出效果.根据useragent.屏幕大小信息.IP.网速.css media Query等原理,实现前端或后端的特征 ...
- Selenium 3 + BrowserMobProxy 2.1.4 模拟浏览器访问 (含趟坑)
背景 Selenium 是一个Web自动化测试的组件,可基于WebDriver去控制弹出浏览器去做一系列Web点击或行为测试(当然也可以去做一些邪恶的事..),减少重复人工网页测试的开销.Browse ...
- nginx只允许移动端访问( 判断拦截pc浏览器访问)
set $mobile_request '0'; if ($http_user_agent ~* (Android|webOS|iPhone|iPod|BlackBerry)) { set $mobi ...
- [转]用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面
FROM : http://blog.csdn.net/gavin_luo/article/details/40620217 现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览 ...
- Python做简单爬虫(urllib.request怎么抓取https以及伪装浏览器访问的方法)
一:抓取简单的页面: 用Python来做爬虫抓取网站这个功能很强大,今天试着抓取了一下百度的首页,很成功,来看一下步骤吧 首先需要准备工具: 1.python:自己比较喜欢用新的东西,所以用的是Pyt ...
- 浏览器访问Servlet
浏览器访问Servlet1.指定一个Servlet路径( 在web.xml : <servlet> ...
- 用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面
现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动. 微信浏览器中打开网页游戏效果还不错,对 ...
- 解决使用IIS5.0配置的FTP服务器,客户端浏览器访问时无法获取目录列表的问题。
我在windows xp sp3下利用iis构架了FTP服务器,允许且只允许匿名用户登陆.但刚开始配置好后,不管是使用命令行模式还是使用浏览器都发现无法访问. 于是怀疑防火墙屏蔽端口所致,果不其然,在 ...
随机推荐
- Python——类的封装
class Gun: def __init__(self, model): # 1. 枪的型号 self.model = model # 2. 子弹的数量 self.bullet_count = 0 ...
- Quartz.NET 入门(转)
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...
- javascript获取当前域名
<script language="javascript">//获取域名host = window.location.host;host2=document.domai ...
- A - Alice's Print Service ZOJ - 3726 (二分)
Alice is providing print service, while the pricing doesn't seem to be reasonable, so people using h ...
- java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...
- W3CSchool闯关笔记(JQuery)
<script> $(document).ready(function(){ }); </script> <!-- Only change code above this ...
- Python+Flask搭建mock api server
Python+Flask搭建mock api server 前言: 近期由于工作需要,需要一个Mock Server调用接口直接返回API结果: 假如可以先通过接口文档的定义,自己模拟出服务器返回结果 ...
- status 返回当前请求的http状态码
status属性返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取.完整的HTTP状态码如下: 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 ...
- 解决用SHA256算法做私钥签名时,遇到“指定的算法无效”的问题
在上一篇随笔“记一次三方接口开发的数据加密方案”中,使用SHA256对数据进行签名时,我提到了一个异常,System.Security.Cryptography.CryptographicExcept ...
- SSH(Struts+spring+hibernate)配置
1.spring和struts 1)web.xml 配置spring的ContextLoaderListener(监听器) 配置Struts的StrutsPrepareAndExecuteFilter ...