博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器中输入一个网址后全部的执行过程
阅读量:2428 次
发布时间:2019-05-10

本文共 806 字,大约阅读时间需要 2 分钟。

过程包括:

域名解析->建立TCP连接(三次握手)->发起http请求->服务器响应http请求,浏览器得到html代码->浏览器解析html代码,并请求html代码中的资源->浏览器对页面进行渲染呈现给用户

域名解析

  1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有且没有过期,则解析到此结束
  2. 如果浏览器自身的缓存中没有找到对应的条目,那么浏览器会搜索操作系统的DNS缓存,,如果找到且没有过期则停止搜索解析到此结束
  3. 如果操作系统的DNS缓存也没有找到,那么就尝试读取hosts文件(位于C:\Windows\Systems32\drivers\etc),查看里面有没有该域名对应的IP地址,如果有,则解析成功
  4. 如果还没有命中,那么就会真正的请求本地域名服务器(DNS)来解析这个域名(通过的是UDP协议的53端口发起请求),服务器会先查询自己的缓存,寻找对应的IP地址,如果找到且没有过期,解析成功,否则本地的DNS服务器就会向根DNS服务器发起请求进行查询。根DNS服务器上是没有记录哪个域名和IP的对应关系,它会告诉本地的DNS服务器可以到哪个域服务器上进行查询,并告诉这个域服务器的地址,这个过程是一个迭代的过程。本地DNS服务器拿到域名对应的IP地址,并返回给操作系统内核,操作系统又把结果返回给浏览器,至此浏览器才拿到域名对应的IP地址

建立TCP请求

拿到域名对应的IP地址后,就会建立TCP三次握手

发起http请求

HTTP请求报文的方法是get方式,如果浏览器存储了该域名下的Cookies,那么会把Cookies放入HTTP请求头里发送给服务器

服务器响应HTTP请求,浏览器得到HTML代码

服务器端WEB程序收到http请求后,就开始处理该请求,处理之后就返回给浏览器html文件

浏览器解析HTML代码,并请求HTML代码中的资源

浏览器对页面进行渲染呈现给用户

转载地址:http://dejmb.baihongyu.com/

你可能感兴趣的文章
优先队列
查看>>
redis深度历险学习笔记--基础与应用篇
查看>>
单链表翻转
查看>>
检查表达式中的括号是否匹配
查看>>
一道关于 goroutine 的面试题
查看>>
信号量的使用方法
查看>>
Redis 缓存穿透、击穿、雪崩
查看>>
RabbitMQ(1): docker-compose安装rabbitmq及简单使用Hello World
查看>>
利用序列化实现对象的拷贝
查看>>
is-a,has-a,like-a是什么
查看>>
简单工厂、工厂、抽象工厂的对比
查看>>
J2EE的体系架构——J2EE
查看>>
对于关系型数据库中的索引的基本理解
查看>>
索引,主键,唯一索引,联合索引的区别
查看>>
剪桌腿的最小代价
查看>>
Zookeeper原理架构
查看>>
利用ZooKeeper简单实现分布式锁
查看>>
Lock、ReentrantLock、synchronized
查看>>
Java过滤器与SpringMVC拦截器之间的关系与区别
查看>>
Java中的String为什么是不可变的?
查看>>