专栏首页Java学习ING*当你在浏览器地址栏输入一个URL后回车,将会发生什么事情?*

*当你在浏览器地址栏输入一个URL后回车,将会发生什么事情?*

*当你在浏览器地址栏输入一个URL后回车,将会发生什么事情?*

参考原文:

http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/

前言:为了对网络应用如何工作有一个完整的层次化的认知,故在此处做一个全面深入的学习。

正文:

一、首先,应该在浏览器输入一个网址,例如facebook.com

二、浏览器查找域名所对应的IP地址——DNS(Domain Name System)

*DNS是一个应用层的域名解析协议,简单说就是一套从域名映射到IP地址的系统,其底层使用UDP(TCP备选)进行解析(未对DNS底层进行学习,仅仅是知道这点)。

DNS查找过程如下:

(1)查找浏览器缓存——浏览器会缓存DNS记录一段时间,但问题是操作系统并不会告诉浏览器每个DNS记录的生存时间,因此浏览器会将他们缓存固定的持续时间(2到30分钟不等)

(2)查找操作系统缓存——如果浏览器不包含所需的记录,则浏览器将进行系统调用(Windows中为gethostbyname),操作系统是具有自己的DNS缓存的。

(3)查找路由器缓存——如果上一步未找到,则进行此操作,路由器通常也具有自己的DNS缓存。

(4)ISP DNS缓存——ISP(Internet Service Provider)因特网服务提供商,DNS服务器通常有两种,一种是权威DNS,一种是缓存DNS,ISP运营商的一般是缓存DNS,给用户查询使用的;域名商的是权威DNS,给缓存DNS查询使用的。

(5)递归搜索——ISP的DNS服务器开始从根名称服务器到.com顶级名称服务器再到Facebook的名称服务器的递归搜索。(通常,DNS服务器在缓存中具有.com名称服务器的名称,因此无需对根名称服务器进行匹配。)

图-1

*轮询DNS是一种DNS查找返回多个IP地址而不是一个IP地址的解析方案,例如,facebook.com实际上映射到4个IP地址。

三、浏览器将HTTP请求发送到Web服务器

*可以肯定的是,浏览器不会从缓存中提供Facebook.com的主页,因为动态页面会很快或立即过期(将过期时间设置为过去),因此浏览器会向Facebook服务器发送以下请求:

图-2

(1)GET请求的网址为“http://facebook.com/”,使用的协议为1.1版本的HTTP协议;

(2)浏览器标识自己(User-Agentb标头),并声明它所接受的响应类型(Accept和Accept-Encoding标头);

(3)Connection标头要求服务器保持此TCP连接开放以便接下来的请求;

(4)请求中还包括针对该域的Cookie,Cookie是键值对,在不同页面请求之间跟踪网站的状态,因此Cookie会存储登录用户的名称,服务器分配给该用户的密码,用户的某些设置等,这些Cookie存储在客户端的文本文件中,并发送给服务器处理每个请求。

*可通过抓包工具查看原始HTTP请求和相应的响应。

*除GET请求外,还有一种常见请求是POST请求通常用于提交表单,二者的区别是GET请求不能带正文,但可以在URL中带参数;POST请求可以带正文,并在正文中携带参数。

*URL“http://facebook.com/”中的斜杠很重要,这种情况下浏览器可以安全地添加斜杠,但对于这种形式“http://example.com/folderOrFile”的URL,浏览器无法自动添加斜杠,因为不清楚folderOrFile是文件夹还是文件,这种情况下,浏览器将在不带斜杠的情况下访问URL,并且服务器通过重定向进行响应,从而导致了不必要的往返。

四、Facebook服务器以永久重定向进行响应

这是Facebook服务器对浏览器请求的响应:

图-3

服务器以301永久重定向进行响应,Location标头告知浏览器目的地址是“http://www.facebook.com/”而不是“http://facebook.com/”。

*服务器坚持重定向而不是立即响应用户想要查看的网页的原因之一与搜索引擎排名有关,如果同一个页面有两个URL,例如“http://www.igoro.com/”和“http://igoro.com/”搜索引擎可能会将它们视为两个不同的站点,传入链接越短的站点排名越低,搜索引擎理解重定向(301),并将来自两个来源的传入链接合并到一个排名中;同样,相同内容的多个URL也不利于缓存,当一条内容具有多个名称时,可能会在缓存中多次出现。

五、浏览器遵循重定向

现在,浏览器知道“ http://www.facebook.com/”是正确的URL,因此它发出另一个GET请求:

图-4

标头含义同第一次请求!

六、服务器“处理”请求

服务器接收GET请求,对其进行处理,然后发送回响应。

其中间过程并不像上面的表述这般简单:

(1)Web服务器软件——Web服务器接收HTTP请求,并决定应执行哪个请求处理程序来处理此请求。请求处理程序是一个程序,用于读取请求并生成响应的HTML。

(2)请求处理程序——请求处理程序读取请求,其参数和Cookie,并且可能更新存储在服务器上的某些数据,然后生成HTML响应。

七、服务器发回HTML响应

这是服务器生成并发回的响应:

图-5

该响应内容告诉浏览器:

(1)响应体用gzip算法压缩,解压缩后即可看到所需的HTML;

(2)Cache-Control标头指定是否以及如何缓存页面;

(3)Content-Type标头指定正文类型为text/html以及字符集编码utf-8,指示浏览器将响应内容呈现为HTML,而不是将其下载为文件。(浏览器通过各个标头来决定如何解释响应,但也会考虑其他因素,例如URL的扩展);

(4)Expires标头指定到期时间。

八、浏览器开始呈现HTML页面

*浏览器在接收到整个HTML文档之前,就开始呈现该网站。

九、浏览器发送对嵌入HTML的对象的请求

*当浏览器呈现HTML时,它会注意到需要获取其他URL的标记,此时浏览器将会发送GET请求以检索每个文件。

以下是原文作者访问facebook.com时检索到的一些URL:

图-6

这些URL中的每一个都将经历类似于HTML页面经历的过程,但是与动态页面有所不同,静态文件允许浏览器进行缓存,某些文件可能会从缓存中提供,而无需联系服务器。浏览器知道将特定文件缓存多长时间,因为返回该文件的响应包含Expires标头,此外每个响应还可能包含ETag标头,其作用类似于版本号,如果浏览器看到已具有该文件版本的ETag,它可以立即停止传输。

十、浏览器发送进一步的异步(AJAX)请求

*即使呈现页面后,客户端仍然与服务器进行通信。

异步请求是通过编程构造的GET或POST请求,该请求将转到一个特殊的URL;这种模式有时也称为“AJAX”,代表“Asynchronous JavaScript And XML”,即“异步JavaScript和XML”。

原文链接:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/

原文作者:Igor Ostrovsky

我来说两句

0 条评论
登录 后参与评论

相关文章

  • *常见排序算法代码实现及特性分析*

    把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到全部插入完为止,得到一个新的有序序列。

    一半是我
  • 其他篇之操作系统——进程管理

    (2)不考虑缓存情况,CPU能且只能对内存进行读写,不能访问外设(输入输出设备);

    一半是我
  • *HashMap实现原理及源码学习(JDK 1.8.0)*

    译>:HashMap的实例有两个影响其性能的参数——“初始容量initial capacity”和“负载因子load factor”,容量指的是哈希表中桶(bu...

    一半是我
  • HTTP应知应会知识点复习手册(下)

    还可参考:https://blog.csdn.net/lpjishu/article/details/50917092

    后端技术漫谈
  • HTTP应知应会知识点复习手册(下)

    还可参考:https://blog.csdn.net/lpjishu/article/details/50917092

    Rude3Knife的公众号
  • TCP/IP协议族(二) HTTP报文头解析

    本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述。下方是报文头每个字段的格式,首先是头部字段的名称,如Accept...

    lizelu
  • 从输入url到页面加载完成发生了什么详解

    这是一道经典的面试题,这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度。当然我写的这...

    IT人一直在路上
  • 深入分析Java Web技术内幕读书笔记(一)浅析Web请求过程

    B/S网络架构采用的是统一的应用层协议HTTP来进行数据的交互,与传统的C/S应用采用的长连接交互方式不同,B/S应用是无状态的短连接的通信方式。也就是说,一次...

    itlemon
  • 三分钟看懂Nginx服务器的缓存原理和机制

    作者:LifeIsButA_Span 来源: http://blog.csdn.net/lifeisbuta_span/article/details/7059...

    小小科
  • 掌握缓存,不再让你蓝瘦香菇 —— 祝各位程序员节日快乐!

    本文内容概要: 1 Web缓存是什么?为什么要使用它? 2 Web缓存的类型 3 浏览器缓存的基本知识 3.1 Expires 3.2 Last-modifie...

    HTML5学堂

扫码关注云+社区

领取腾讯云代金券