http请求过程分析

原创 2016年08月29日 16:38:30

http请求过程

   本文是参考了多篇博客,并结合自身工作中遇到的实际问题总结过后写出来的,希望能帮助到有兴趣关注这个的人
   此处以访问百度首页为例,当我们在浏览器地址栏中输入http://www.baidu.com并回车后,我们马上能看到百度的首页,虽然这个过程很短,但这背后究竟发生了什么呢?
现简要地理一下这背后的执行流程:

  • 1.域名解析
  • 2.客户端浏览器发送http请求
  • 3.服务器响应http请求,并向客户端浏览器返回html代码
  • 4.客户端浏览器得到html代码并进行解析,同时请求html代码中的所包含的资源,例如js、css样式表、图片等
  • 5.浏览器对整个页面进行渲染,并将渲染后的页面呈现给用户



下面逐一进行分析

域名解析

当我们访问www.baidu.com这个域名时,实际上浏览器不知道它是啥(浏览器事先缓存的不作考虑),浏览器真正需要的是IP地址,你给浏览器IP,它就根据这个IP去寻找对应的服务器,并尝试建立连接(所以说你在地址栏里直接输入百度对应的ip地址也是可以访问的)。那为什么浏览器最终识别了www.baidu.com并访问成功了呢?嗯,这个时候就得靠DNS了(DomainNamingSystem),说简单点,它就是一个根据域名获取对应ip的服务器。那么我们再来看看,当我们访问www.baidu.com时,域名的解析过程

  • 浏览器缓存   首先,浏览器会优先查找浏览器自身DNS缓存,如果找到了便直接利用找到的ip并建立连接(浏览器缓存DNS的时间比较短,通常是1到30分钟,且能缓存的数量有限,不同的浏览器厂商设置的初值也 有所不同)
  • 系统缓存    当浏览器缓存找不到域名对应的ip,接下来浏览器便会做一个系统调用(win系统是gethostname),于是从系统缓存中获取域名对应的ip.顺便说一下,win系统中host的设置在C:\Windows\System32\drivers\etc\hosts中,譬如你可以设置 127.0.0.1 www.baidu.com,当然你这样设置后,下次再访问www.baidu.com,那就不会再出现百度的首页了,很有可能是404(微笑脸<( ̄︶ ̄)>)
  • 路由器缓存   若是系统缓存找不到,紧接着便将查询请求发至路由器,路由器通常会有自己的缓存
  • ISP DNS缓存   当路由器缓存没找到,则转向ISP的DNS服务器,在这一步,通常是可以找到相应的缓存记录的。ISP的DNS服务器会从根域名服务器开始进行递归的搜索,从顶级域名.com服务器开始到baidu的域名服务器…

-倘若上诉的所有DNS缓存均没有找到www.baidu.com这个域名所对应的ip地址,那么浏览器自动给出错误信息,不同的浏览器返回的错误信息不一样,火狐的便显示为找不到服务器

Attention:

    在应用部署在局域网中,且并没有在域名注册商中进行注册时,局域网内的用户要通过域名访问服务器上的应用,那就必须得在本机的hosts文件中绑定相应的域名了,假如你在IP地址为172.168.0.413的服务器上部署了passport.co应用,你如果没有在hosts文件中绑定:

    172.168.0.413    passport.co

    那么,当你调passport的应用时,浏览器就可能找不到passport.co对应的ip地址(找到了也不是你想要调的那个应用),找不到ip地址就无法建立TCP连接,从而无法调用该服务。因此,对于局域网内部署的应用,要想调该应用,必须得让浏览器能解析出该应用(域名)所对应的ip地址


http请求

百度的动态页面在浏览器的缓存中会很快过期,因此,浏览器会将请求进一步发送到baidu的服务器,下面这是一个典型的http请求内容
请求及响应的主要内容

Request URL:https://www.baidu.com/
Request Method:GET
Status Code:200 OK
Remote Address:115.239.210.27:443

请求头–request header

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:BAIDUID=6FC319C4992DD86CD6034F472D035D9F:FG=1;
BIDUPSID=6FC319C4992DD86CD6034F472D035D9F; PSTM=1472434929;
Host:www.baidu.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/52.0.2743.116 Safari/537.36

响应头–response header

**Connection:**keep-alive
**Content-Encoding:**gzip
**Content-Type:**text/html; charset=utf-8
**Date:**Mon, 29 Aug 2016 01:57:08 GMT
**Expires:**Mon, 29 Aug 2016 01:56:15 GMT
**Server:**bfe/1.0.8.14

    其中,涉及的主要过程是:浏览器向服务器发送请求,请求类型为GET(常用的是GET和POST,当然还有其它6种,如HEAD,DELETE,TRACE等),www.baidu.com的域名被解析后的ip地址为:115.239.210.27,服务运行的端口号为:443。百度的服务器在接收到请求后,发给客户端浏览器响应,status为响应码,其中200代表请求成功;响应的内容为:text/html;编码方式为:utf-8。
    对于响应的状态码,以下作简要介绍:

  • 1XX类:信息状态码,如100,101
  • 2XX类:成功状态码,如200:OK
  • 3XX类:重定向状态码
    301:永久重定向,由于地址栏中的url未变,故此种为隐藏重定向
    302:临时重定向,地址栏中的url会变为新的url
    304:Not Modified 未修改。举个栗子,譬如,当本地缓存的资源文件(如css,js,某些图片等)和请求服务器上的资源相比较时,发现并没有任何修改,那么服务器便会返回给浏览器一个304的状态码,也就是告诉浏览器,你本地有这些资源文件了,不用再请求我这边啦
  • 4XX类:访问错误状态码
    404:这是见得最多的吧,大名鼎鼎404—NOT FOUND,翻译过来就是浏览器请求的url资源并不存在
  • 5XX类:服务器端错误状态码
    500:Internal Server Error服务器内部错误
    502:Bad Gateway 网关(代理服务器)无法请求到后端服务器,也可以说代理服务器不可用
    504:Gateway Timeout 此状态码表明代理服务器可以连上后端服务器,但后端服务器在指定时间里没有给代理服务器做出响应

浏览器解析响应的html代码,并请求相应的资源

    浏览器获取到服务器返回的html代码后(response中可以看到)。我们假定返回的是baidu.html,浏览器获取到baidu.html后并不会马上进行渲染,它首先会去寻找html中的静态资源,倘若碰到js/css/image等静态资源时,浏览器便会继续请求服务器来下载该资源(服务器ip地址可能会不同,这个有可能用到cdn加速)。当浏览器中有该种类型的静态资源文件且服务器端未作修改时,会给浏览器返回304的状态码,从而浏览器会直接读取本地的缓存文件。

浏览器渲染页面

    当html中所需的资源全部加载完毕后,浏览器便开始渲染页面,用户所看的便是渲染过后的页面

版权声明:本文为博主原创文章,未经博主允许不得转载。

一张图说明访问网站的流程

一张图说明访问网站的流程最近看了一些关于Web请求资源方面的知识,自己总结了一个流程图,描述了打开浏览器访问一个网站到网站被渲染出来的流程,希望对大家的学习有所帮助~另外,给大家推荐一款画图很好用的C...
  • sunmc1204953974
  • sunmc1204953974
  • 2015年11月21日 11:53
  • 5908

一次完整的HTTP事务是怎样一个过程?

一次HTTP请求的完成过程如下: 一、浏览器从URL中接续
  • yipiankongbai
  • yipiankongbai
  • 2014年05月05日 10:21
  • 26013

【项目】简易http服务器流程图分析

看这篇博客前先看-http协议基础知识总结:http://blog.csdn.net/llzk_/article/details/70513739http服务器是基于C/S模式(客户端/服务器),应用...
  • LLZK_
  • LLZK_
  • 2017年04月23日 18:31
  • 1175

HTTP处理流程图

HTTP处理流程图   当第一个请求到达时的动作如下图所示:    初始化所有核心应用程序对象之后,将通过创建 HttpApplication 类的实例启动应用程序。如果应用程序具...
  • WuLex
  • WuLex
  • 2014年11月26日 13:33
  • 2337

一次完整的HTTP请求所经历的7个步骤

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:  1. 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务...
  • JameBing
  • JameBing
  • 2016年11月24日 17:27
  • 2195

Http请求和Http响应详细解析

http://www.cnblogs.com/linjiqin/p/3560152.html(转载) 一次完整的HTTP请求所经历的7个步骤 HTTP通信机制是在一次完整的HTTP通信过程中,We...
  • chen1403876161
  • chen1403876161
  • 2016年05月31日 16:10
  • 18291

SpringMVC一次请求过程源码分析

今天来探索SpringMVC一次请求过程的源码,首先需要找到程序运行的类及主要方法: 我们使用StringMVC首先需要在web.xml中设置一个前端控制器来处理请求,这个前端控制器是:org....
  • OnlyLove_longshao
  • OnlyLove_longshao
  • 2016年12月15日 22:21
  • 1388

http学习笔记(模拟http请求和响应过程)

HTTP请求消息1、http请求报文格式解析:起始行+首部字段+主体POST /api/feed/ HTTP/1.1 –起始行 Accept-Encoding: gzip –请...
  • qq_21196881
  • qq_21196881
  • 2017年01月08日 20:58
  • 310

Spring mvc 从一个http请求分析DispatcherServlet的工作过程

开发工具 Intellij IDEA  目标、调试 请求http://localhost:8080/coffee/helloworld dispatcher org...
  • ID19870510
  • ID19870510
  • 2016年11月09日 23:54
  • 806

读书笔记-Web请求过程解析

读书笔记-Web请求过程解析1.如何发起一个请求当用户在浏览器输入 www.baidu.com 这个URL时,将会发生以下操作。 (1)浏览器请求DNS将这个域名解析为对应的IP地址。 (2)浏览器根...
  • qing0706
  • qing0706
  • 2015年09月25日 09:44
  • 541
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:http请求过程分析
举报原因:
原因补充:

(最多只允许输入30个字)