1、域名解析;
浏览器先搜索自身的DNS缓存
->搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)
->读取本地host文件(操作系统DNS也没找到)
->浏览器发起DNS的系统调用(宽带运营服务商提供)
->宽带运营服务器查看本身缓存
->运营商服务器发起一个迭代DNS解析的请求
(imooc.com为例:先找根域DNS的IP地址->拿到com域的顶级域的IP地址->拿到imooc.com域的IP地址->将查到的结果发送给运营商服务器->运营商服务器把结果返回给操作系统内核同时缓存起来->内核从DNS拿到IP地址将结果返回给浏览器->浏览器拿到imooc.com对应的IP地址)  
查看浏览器自身的DNS缓存(chrome为例):chrome://net-internals/#dns
2、浏览器获得域名对应的IP地址后,发起HTTP‘三次握手’
浏览器以随机端口向服务器的web程序发起tcp连接请求:通过层层的路由设备到达服务器端以后,进入到网卡,然后进入到内核的TCP/IP协议栈,还可能经历防火墙的过滤,最终到web服务端。
3、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了,比如:用HTTP的GET方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。
4、服务器端接受到这个请求,根据路径参数,经过后端的一些处理后,把处理后的一个结果的数据返回给浏览器,如果是慕课网的页面,就会把完整的html页面代码返回给浏览器。
5、浏览器拿到了慕课网的完整的html页面代码,在解析和渲染这个页面的时候,里面的js、css、图片静态资源,他们同样也是一个个http请求,都需要经过上面的4个步骤。
6、浏览器根据拿到的资源,对页面进行渲染,最终把一个完整的页面呈现给用户。

Http简单解析过程的更多相关文章

  1. HTTP请求解析过程 (简单概括)

    1.域名解析 用户输入网址,由域名系统DNS解析输入的网址: 2.TCP的3次握手 通过域名解析出的IP地址来向web服务器发起TCP连接请求,如果3次握手通过,则与web服务端建立了可靠的连接: 3 ...

  2. 解读JSP的解析过程

    解读JSP的解析过程 互联网上,这方面的资料实在太少了,故把自己研究的一些结果公布出来. 首先,问大家几个问题,看大家能不能回答出来,或者在网上能不能找到答案: 1.page.include.tagl ...

  3. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  4. 【原创】大数据基础之Hive(2)Hive SQL执行过程之SQL解析过程

    Hive SQL解析过程 SQL->AST(Abstract Syntax Tree)->Task(MapRedTask,FetchTask)->QueryPlan(Task集合)- ...

  5. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  6. MyBatis 源码分析 - 配置文件解析过程

    * 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAl ...

  7. MySQL解析过程、执行过程

    转载:https://student-lp.iteye.com/blog/2152601 https://www.cnblogs.com/cdf-opensource-007/p/6502556.ht ...

  8. spring cron表达式及解析过程

    1.cron表达式 cron表达式是用来配置spring定时任务执行时间的字符串,由5个空格分隔成的6个域构成,格式如下: {秒}  {分}  {时}  {日}  {月}  {周} 每一个域的含义解释 ...

  9. DNS解析过程和DNS挟持

    1.DNS解析过程详解 1).在浏览器中输入一个域名,例如www.tmall.com,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析, ...

随机推荐

  1. vue的全局方法和局部方法

    var infiniteScroll = require('vue-infinite-scroll') 等价写法 import infiniteScroll from 'vue-infinite-sc ...

  2. Vue的生命周期(钩子函数)

    Vue一共有10个生命周期函数,我们可以利用这些函数在vue的每个阶段都进行操作数据或者改变内容. 其实在Vue的官网有一张图已经很好的诠释了生命周期,我在这里就不再多讲了,直接贴图,然后上程序代码. ...

  3. JOISC 2014 邮戳拉力赛(基础DP)

    题意 https://loj.ac/problem/2878 思路 真的神仙题,想到就很好写,想不到就写不出来. 肯定只能一个一个邮戳按顺序分析.首先,将取一枚邮戳的路径分为四种: 上行 \(\rig ...

  4. Docker之Swarm

    Docker学习笔记 — Swarm搭建Docker集群 Swarm在schedule节点运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, ...

  5. QT移植无法启动 This application failed to start because it could not find or load the QT platform

    QT配置好在自己机器上可以运行,但在别人机器上一直弹出 "This application failed to start because it could not find or load ...

  6. File类文件的常见操作

    boolean exists() 判断文件或者目录是否存在 boolean isFile()  判断是否是文件 boolean isDirectory() 判断是否是目录 String getPath ...

  7. C# linq 最大、最小对象的扩展

    public static class LinqExtension { public static T MaxBy<T, TR>(this IEnumerable<T> en, ...

  8. SMTP发送邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

  9. 获取IP及判断IP是否在区间

    /// <summary> /// 获取客户端IP /// </summary> /// <returns></returns> public stat ...

  10. Maven命令行创建java或javaWeb项目

    Maven命令行创建java或javaWeb项目   1.命令行创建普通java项目 mvn archetype:generate -DgroupId=com.fxust -DartifactId=d ...