【问题描述】

在浏览器输入www.baidu.com,然后,浏览器显示相应的百度页面,这个过程究竟发生了什么呢?

【第一步,解析域名,找到主机】

正常情况下,浏览器会缓存DNS一段时间,一般2分钟到30分钟不等。如果有缓存,直接返回IP。

缓存中如果没有查到IP,浏览器会做系统调用,读取主机的hosts文件,如果找到,直接返回IP。

hosts文件里面还是没有找到,则直接去路由器中寻找DNS缓存,一般这个时候都能找到对应的IP。

如果还是没有找到,ISP的DNS服务器就开始从根域名服务器开始递归搜索,从.com顶级域名服务器开始,一直到baidu的域名服务器。

这个时候,浏览器就获取到了对应的IP。在解析的过程中,常常会解析出不通的IP,这是根据不同的用户,不同的网络供应商,所在的地域,等等等等进行计算给出的最优的IP地址。

劫持DNS,可以屏蔽掉很多网点的访问。

【第二步,浏览器与网站建立TCP连接】

浏览器利用IP直接与网站主机通信。

浏览器发出TCP(SYN=1,ACK=0)连接请求,主机返回TCP(SYN=1,ACK=1)应答报文,浏览器收到应答报文发现ACK标志位为1,表示连接请求确认。

浏览器返回TCP(ACK=1)确认报文,主机收到确认报文,三次握手,TCP链接建立完成。

【第三步,浏览器发起get请求】

浏览器向主机发起一个HTTP-GET方法报文请求。

请求中包含访问的URL,也就是http://www.baidu.com ,还有User-Agent用户浏览器操作系统信息,编码等。

值得一提的是Accep-Encoding和Cookies项。

Accept-Encoding一般采用gzip,压缩之后传输html文件。

Cookies如果是首次访问,会提示服务器建立用户缓存信息,如果不是,可以利用Cookies对应键值,找到相应缓存,缓存里面存放着用户名,密码和一些用户设置项。

【最后一步,显示页面】

返回状态码,表示服务器已经成功响应后正常返回。

在报文头里面Content-type为"test/html",浏览器以HTML形式呈现。

不过,对于大型网站,一般都存在两个乃至上百个主机站点,往往都不会直接返回请求页面,而是重定向。

这时候,返回的状态码就不再是200,而是"301,302"等以3开头的重定向码。

浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新第一步访问即可。

最后再补充一点。

重定向是为了负载均衡或者导入流量提高SEO排名

利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;

重定向也可将多个域名的访问,集中到一个站点,

由于baidu.com,www.baidu.com会被搜索引擎认为是两个网站,造成每个的链接数都会减少从而降低排名,永久重定向会将两个地址关联起来,搜索引擎会认为是同一个网站,从而提高排名。

浏览器输入URL到返回页面的全过程的更多相关文章

  1. 浏览器输入URL到响应页面的全过程

    B/S网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,HTTP协议采用无状态的短链接的通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通 ...

  2. 浏览器中输入URL到返回页面的全过程

    第一步,解析域名,找到主机IP (1)浏览器会缓存DNS一段时间,一般2-30分钟不等.如果有缓存,直接返回IP,否则下一步. (2)缓存中无法找到IP,浏览器会进行一个系统调用,查询hosts文件. ...

  3. 输入URL到展现页面的全过程

    最近在看一本关于网络协议的书<图解HTTP> 当我们在浏览器的地址栏输入 http://www.pwstrick.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢? 1.  域名 ...

  4. 计算机网络【6】—— 从浏览器输入URL到显示页面发生了什么

    当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染. 一.网络通信 互联网内各网络设备间的通信都遵循TCP ...

  5. 从浏览器输入URL到显示页面到底发生了什么?

    首先说明一下,当系统本地缓存了你所请求的资源时,会直接把缓存内容解析并显示,而不会进行以下的一系列行为. 一.DNS域名解析 至今的计算机数量可谓是数不胜数,而它们的唯一识别身份就是ip地址.我们常说 ...

  6. HTTP工作过程(浏览器输入URL到返回HTML页面都经历了什么)

    超文本传送协议(HyperText Transport Protocol,HTTP)是互联网上应用最为广泛的一种网络协议,它工作在应用层,使用TCP的80号端口提供服务.并且HTTP是工作在客户/服务 ...

  7. 从输入 URL 到展现页面的全过程

    总体分为以下几个过程 DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 DNS解析 域名到ip地址转换 TCP连接 HTTP连接是基于TCP连接 ...

  8. 从浏览器输入url到显示页面的过程 (前端面试题)

    域名DNS解析,解析到真正的IP地址             | 客户端与服务端建立TCP连接,3次握手 | 客户端发送Http请求 | server接收到http请求,处理,并返回 | 客户端接收到 ...

  9. 关于浏览器,从输入URL到呈现页面过程!(主讲TCP/IP协议)

    一.文本对话--从请求到响应 我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容.实际上这个过程是: (1)浏览器向网站所在的服务器发送了一个 Request(请求) (2)网站服务 ...

随机推荐

  1. 并发编程-concurrent指南-阻塞队列-同步队列SynchronousQueue

    SynchronousQueue:同步Queue,属于线程安全的BlockingQueue的一种,此队列设计的理念类似于"单工模式",对于每个put/offer操作,必须等待一个t ...

  2. Jmh测试JDK,CGLIB,JAVASSIST动态代理方式的性能

    前言 JDK,CGLIB,JAVASSIST是常用的动态代理方式. JDK动态代理仅能对具有接口的类进行代理. CGLIB动态代理方式的目标类可以没有接口. Javassist是一个开源的分析.编辑和 ...

  3. POJ 2175:Evacuation Plan(费用流消圈算法)***

    http://poj.org/problem?id=2175 题意:有n个楼,m个防空洞,每个楼有一个坐标和一个人数B,每个防空洞有一个坐标和容纳量C,从楼到防空洞需要的时间是其曼哈顿距离+1,现在给 ...

  4. Nginx正向代理和反向代理

    关于代理 说到代理,首先我们要明确一个概念,所谓代理就是一个代表.一个渠道: 此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过 ...

  5. 开源FTP/SFTP客户端 FileZilla v3.31.0 绿色便携版

    下载地址:点我 基本介绍 FileZilla是一种快速.可信赖的FTP客户端以及服务器端开放源代码程式,具有多种特色.直觉的接口.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端 ...

  6. 【深入浅出-JVM】(6):栈帧.

    代码 package com.mousycoder.mycode.happy_jvm; /** * @version 1.0 * @author: mousycoder * @date: 2019-0 ...

  7. 包教包会之Open Live Writer设置代码样式

    Open Live Writer(以下简称OLW),作为一个在本地写博文,然后发布到各个博客网站的客户端,在使用上个人觉得还是比较好用的.但是其对IT博文中代码部分的内容样式支持不是很友好.下面是本人 ...

  8. Greenplum+mybatis问题解析

    1. 问题描述 同事团队在使用springboot+mybatis+Greenplum时,发现通过mybatis数据查询正常,但是执行insert和update执行会报"Cause: org ...

  9. 异常——cmd下javac错误:编码GBK不可映射字符

    在看菜鸟教程时候用记事本创建文件,之后用notepad++编辑后,运行出现错误. 首先从信息上知道这是编码的问题了.开始试了下再notepad++上打开文件选择标签栏的“Encoding”中的“enc ...

  10. Python多进程与多线程编程及GIL详解

    介绍如何使用python的multiprocess和threading模块进行多线程和多进程编程. Python的多进程编程与multiprocess模块 python的多进程编程主要依靠multip ...