输入url后浏览器干了些什么(详解)
输入url后浏览器干了些什么(详解)
DNS(Domain Name System, 域名系统) 解析
DNS解析的过程就是寻找哪台机器上有你真正需要的资源过程.但你在浏览器张红输入一个地址时,例如:baidu.com,其实不是百度网站真正意义上的地址.互联网上每一台计算机的唯一标识是他的IP地址,但是IP地址并不方便记忆.用户更细化用方便记忆的网址去寻找互联网上的其他计算机.也就是上面提到的百度的网址.所以互联网设计者需要在用户的方便性与可用性做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析.他实际上充当了一个翻译的角色,实现了网址到IP地址的转换.当然如果你直接输入的是另一台电脑的IP地址来访问他,那么不存在这一步.
TCP连接(三次握手)
知道了服务器的IP地址,就开始和服务器简历连接了.连接的建立需要经历三次握手
- 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入
SYN_SENT,等待服务器确认. - 第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己发送一个SYN包(syn=k),即
SYN+ACK包,此时服务器进入SYN_RECV状态 - 第三次握手: 客户端收到服务器的
SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP链接成功状态),完成三次握手
发送HTTP请求
当服务器与主机建立了链接以后,注意开始和服务器进行通信.网页请求是一个单向请求的过程.即一个主机向服务器请求数据,服务器返回相应的数据的过程.浏览器根据URL内容生成HTTP请求,HTTP请求报文是由三部分组成:请求行,请求报头,请求正文.
服务器处理请求并返回HTTP报文
服务器接到请求后,会根据HTTP请求中的内容来决定如何获取相应的HTML文件,服务器得到的HTML文件发送给浏览器.HTTP响应报文也是由三部分组成:状态码,响应头,响应报文.
- 状态码
- 1xx: 指示信息,标示请求已接收,急需处理.
- 2xx: 成功信息,标示请求已被成功接收,理解,接收
- 3xx: 重定向,要完成请求必须进行更进一步的操作
- 4xx: 客户端错误,请求有语法错误或请求无法实现
- 5xx: 服务器端错误,服务器未能实现合法的错误
- 响应头
- 常见的响应头字段有:Server,Connection..
- 响应报文
- 服务器返回给浏览器的文本信息,同昌HTML,CSS,JS,图片等文件就放在这一部分
浏览器解析渲染页面
在浏览器还没有在完全接受HTML文件时便开始渲染,显示网页
在执行HTML中的代码时,根据需要,浏览器会继续请求图片,CSS,JavaScript等文件.过程同请求HTML
连接结束
四次回收连接
- 客户端进程发出连接释放报文,并且停止发送数据.释放数据报文首部.FIN=1,其序列号为seq=u(风雨前面已经传过来的数据的最后一个序号+1),此时,客户端进入FIN-WAIT-1(终止等待1)状态.TCP规定,FIN报文段即使不携带数据,也要消耗一个序号.
- 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v此时,服务端就加入了CLOSE-WAIT(关闭-等待)状态.TCP服务器同之高层的应用进程,客户端向服务器的方向接释放了,这时处于半关闭状态,及客户端已经没有数据要发送了.但是服务器若发送数据,客户端仍然接收.这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间.
- 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接收服务器发送的最后数据).
- 服务器将最后的数据发送完毕后,就像客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认
- 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时客户端进入了TIME-WAIT(时间等待)状态.注意此时TCP连接没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态
- 服务器只要收到客户端发出的确认,立即进入CLOSED状态.同样,撤销TCB后,就结束了这次TCP连接.可以看到,服务器结束TCP连接的时间比客户端要更早一些
输入url后浏览器干了些什么(详解)的更多相关文章
- 输入URL后浏览器的过程
In this article, I want my readers to get a picture of a very basic concept of the web world. Previo ...
- 在浏览器输入 URL 后会发生什么?超级详细介绍
一个古老的面试问题:当你在浏览器中输入whosmall.com并且按下回车之后发生了什么? 不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任何细节. 这将是一个协作的过程,所以深入挖 ...
- 在浏览器输入url后并回车发生了哪些过程
1.解析URL ________________________________________________________________________ 关于URL: URL(Universa ...
- 在浏览器输入URL后发生了什么?
摘录部分一:https://www.cnblogs.com/kongxy/p/4615226.html 从输入URL到浏览器显示页面发生了什么 当在浏览器地址栏输入网址,如:www.baidu.com ...
- 【转】浏览器中输入url后发生了什么
原文地址:http://www.jianshu.com/p/c1dfc6caa520 在学习前端的过程中经常看到这样一个问题:当你在浏览器中输入url后发生了什么?下面是个人学习过程中的总结,供个人复 ...
- 在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)
在浏览器中输入URL后,执行的全部过程.会用到哪些协议?(一次完整的HTTP请求过程) 整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议.ARP协议和OSPF协议. 发起 ...
- 从输入 URL 到浏览器接收的过程中发生了什么事情
从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU 首先是「输入 U ...
- 从输入 URL 到浏览器接收的过程中发生了什么事情?
从输入 URL 到浏览器接收的过程中发生了什么事情? What really happens when you navigate to a URL 上面两篇文章都解读的很好,值得阅读. 接下来在总结一 ...
- 输入URL到浏览器显示页面的过程,搜集各方面资料总结一下
面试中经常会被问到这个问题吧,唉,我最开始被问到的时候也就能大概说一些流程.被问得多了,自己就想去找找这个问题的全面回答,于是乎搜了很多资料和网上的文章,根据那些文章写一个总结. 写得不好,或者有意见 ...
随机推荐
- docker出现相同的image条目的删除办法
一.问题:在测试docker安装的prometheus系统时,由于异常操作,使用docker image ls出现了两条一模一样的条目,如下: [root@ELK prometheus]# docke ...
- Rocket - devices - CanHaveBuiltInDevices
https://mp.weixin.qq.com/s/C9iktVr4hnQ8lM0CiWtedQ 简单介绍CanHaveBuiltInDevices的实现. 1. HasBuiltInDeviceP ...
- treegrid树形表格的完美运用
一 问题描述: 树形表格TreeGrid在日常项目中还是运用的比较多的,哪我们在项目中,应该怎么引入和使用 TreeGrid呢? 二 使用步骤 1.首先我们需要在项目中,引入TreeGrid组件 需 ...
- ActiveMQ 笔记(八)高级特性和大厂常考重点
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.可用性保证 引入消息队列之后该如何保证其高可用性? 持久化.事务.签收. 以及带复制的 Leavel ...
- Java实现 LeetCode 188 买卖股票的最佳时机 IV
188. 买卖股票的最佳时机 IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多 ...
- java实现复制网站内容
复制网站内容 复制代码 本程序将网站"www.baidu.com"首页的内容复制保存在文件test.html中.写了如下代码,请完善之: import java.net.*; im ...
- java代码(4)---guava之Immutable(不可变)集合
Immutable(不可变)集合 一,概述 guava是google的一个库,弥补了java语音的很多方面的不足,很多在java8中已有实现,暂时不展开,Collections是jdk提供的一个工 ...
- ASP.NET Core Blazor Webassembly 之 路由
web最精妙的设计就是通过url把多个页面串联起来,并且可以互相跳转.我们开发系统的时候总是需要使用路由来实现页面间的跳转.传统的web开发主要是使用a标签或者是服务端redirect来跳转.那今天来 ...
- Python面试常用的高级用法,怎么动态创建类?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第16篇文章,今天我们来聊聊Python当中的元类. 元类是Python当中的高级用法,如果你之前从来没见过这个术语 ...
- k8s学习-存储
4.6.存储 4.6.1.ConfigMap 创建方式 文件夹/文件创建 mkdir dir cd dir cat > c1.properties <<EOF c1.name=c1 ...