在浏览器中输⼊url地址显示主⻚的过程

在浏览器中输⼊url地址显示主⻚的过程

这里写目录标题

      • 1、DNS解析
      • 2、建立TCP三次握手
      • 3、发送HTTP请求
        • 3.1、http协议的流程?
        • 3.2、HTTP状态码
        • 3.3、GET和POST区别
          • ==区别==
            • 数据样式:
            • 参数类型;
            • 数据大小:
            • 安全性
            • Get、Post请求发送的数据包有什么不同吗?
        • 3.4、响应头信息cookie和session的区别
          • ==区别==
            • 存取方式:
            • 安全性:
            • 浏览器支持不同:
        • 3.5、HTTP 1.0和HTTP 1.1 、HTTP 2.0区别
          • ==HTTP 1.0和HTTP 1.1区别:==
            • 长连接、短连接
            • 缓存处理
            • HOST域
          • HTTP2.0
            • 二进制编码
            • header压缩
            • 多路复用分侦
            • 服务端主动发送
      • 4、服务端相应HTTP请求
      • 5、浏览器解析渲染页面
          • 5.1、浏览器在接收到HTML,CSS,JS文件后,如何把页面呈现在屏幕上?
      • 6、连接结束(TCP四次挥手)
          • ==TCP和UDP区别:==
            • TCP:
            • UDP:

URL(统一资源定位符)组成:传输协议、服务器的域名、端口、虚拟目录、文件名、锚点、参数

浏览器对输入的URL首先会进行识别,抽取出域名字段,例如: baidu.com,然后需要对域名进行解析,即DNS解析。

1、DNS解析

如果输入ip地址表示直接从主机上调用内容,输入域名,是通过域名解析服务器指向对应主机的IP地址,再从主机上调用网址的内容,DNS解析时,主要会经过一下内容:

  • 查询浏览器缓存,如果没有查到
  • 会进入系统缓存进行查询,此时主要查询host文件,这个文件主要保存以前访问过的域名和IP数据,类似本地数据库,如果找到,可直接获取目标主机的IP地址,如果没找到,进入
  • 路由缓存,路由器有自己的DNS缓存,如果查到就返回,否则进入下一步递归查询
  • 从根域名服务器 --> 顶级域名服务器 --> 极限域名服务器,依次搜索查找对应目标域名的IP,找到以后,会建立TCP连接

2、建立TCP三次握手

TCP三次握手与四次挥手

3、发送HTTP请求

HTTP请求报文是由三部分组成: 请求行, 请求报头请求正文。常用的请求方法有: GET、POST、PUT、DELETE、OPTIONS、HEAD

3.1、http协议的流程?
  1. 首先进行域名解析。
  2. 浏览器发起HTTP请求。
  3. 接下来到了传输层,选择传输协议。TCP或者UDP,TCP是可靠的传输控制协议,对HTTP请求进行封装,加入了端口号等信息。
  4. 然后到了网络层,通过IP协议将IP地址封装为IP数据报;然后此时会用到ARP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;
  5. 接下来到了数据链路层,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的mac开始建立TCP连接,三次握手,接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层,然后层层向上传递到应用层;
  6. 服务器响应请求并返回客户端要的资源,传回给客户端;
  7. 断开TCP连接,浏览器对页面进行渲染呈现给客户端。
3.2、HTTP状态码

301:永久重定向

302:临时重定向

400:语法错误

401:表示需要认证

403:表示请求被拒绝

404:没发现资源

500:服务器内部出现故障

3.3、GET和POST区别

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

区别
数据样式:
  • GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连。

  • POST 比GET安全,因为 url GET是直接暴露的。POST数据不会显示在URL中,是放在Request body中。

参数类型;

GET只接受ASCII字符,而POST没有限制。

GET请求参数会被完整保留在浏览器历史记录里;相反,POST请求参数也不会被浏览器保留。

数据大小:
  • “GET方式提交的数据最多只能是1024字节”,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
  • POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。
安全性

POST的安全性要比GET的安全性高,安全:可查看数据,但是不可修改,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码。但是总的来说,不管是put还是get都是不算安全的,因为HTTP是明文传输。

Get、Post请求发送的数据包有什么不同吗?

GET是一个包将Header 和 body 同时发送过去,POST 是先发送head ,再发送body,分两个包发送。

就像是GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼老铁,我等下要送一批货来,你们准备接收一下哈,然后再回头把货送过去。

3.4、响应头信息cookie和session的区别

Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。

Cookie ⽤来保存⽤户信息,是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。

Session是服务器端技术, session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

区别
存取方式:

cookie只能存储ASCII码字符串,而Session可以存储任何类型的数据

安全性:

cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗, 考虑到安全应当使用session。

浏览器支持不同:

当客户端禁用cookie时无法使用cookie,此时需要运用Session以及URL地址的重写。

3.5、HTTP 1.0和HTTP 1.1 、HTTP 2.0区别
HTTP 1.0和HTTP 1.1区别:
长连接、短连接

HTTP1.0默认的是短连接,该连接就是客户端和服务器没进行一次HTTP操作,就会建立一次连接,任务结束之后,就会断开连接。

HTTP1.1默认的是长连接,使用长连接时,会在HTTP的响应头加入:

Connection:keep-alive

在长链接下:建立一次TCP连接后进行多次请求和响应的交互。

缓存处理

HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

HOST域
  • 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。

  • HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误

HTTP2.0
二进制编码

HTTP2.0时代将 HTTP/1 的文本格式改成二进制格式传输数据,极大提高了 HTTP 传输效率,而且二进制数据使用位运算能高效解析。

header压缩

HTTP/2 没使用常见的 gzip 压缩方式来压缩头部,而是开发了 HPACK算法,HPACK 算法主要包含三个组成部分:

  • 静态字典;
  • 动态字典;
  • Huffman 编码(压缩算法)
多路复用分侦

HTTP/1.1 的实现是基于请求-响应模型的。同一个连接中,HTTP 完成一个事务(请求与响应),才能处理下一个事务,也就是说在发出请求等待响应的过程中,是没办法做其他事情的,如果响应迟迟不来,那么后续的请求是无法发送的,也造成了队头阻塞的问题。

而 HTTP/2通过 Stream 这个设计,多个 Stream 复用一条 TCP 连接,达到并发的效果,解决了 HTTP/1.1 队头阻塞的问题,提高了 HTTP 传输的吞吐量。

服务端主动发送

可以在用户请求 html 时,可以主动的推送 css 资源,一次请求,多次发送。

4、服务端相应HTTP请求

5、浏览器解析渲染页面

5.1、浏览器在接收到HTML,CSS,JS文件后,如何把页面呈现在屏幕上?

浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

JS的解析是由浏览器中的JS解析引擎完成的。JS是单线程运行,也就是说,在同一个时间内只能做一件事,所有的任务都需要排队,前一个任务结束,后一个任务才能开始。这时需要一种机制可以先执行排在后面的任务,这就是:同步任务(synchronous)和异步任务(asynchronous),JS的执行机制就可以看做是一个主线程加上一个任务队列(task queue)。同步任务就是放在主线程上执行的任务,异步任务是放在任务队列中的任务。所有的同步任务在主线程上执行,形成一个执行栈;异步任务有了运行结果就会在任务队列中放置一个事件;脚本运行时先依次运行执行栈,然后会从任务队列里提取事件,运行任务队列中的任务,这个过程是不断重复的,所以又叫做事件循环(Event loop)。

浏览器在解析过程中,如果遇到请求外部资源时,如图像,iconfont,JS等。浏览器将重复1-6过程下载该资源。请求过程是异步的,并不会影响HTML文档进行加载,但是当文档加载过程中遇到JS文件,HTML文档会挂起渲染过程,不仅要等到文档中JS文件加载完毕还要等待解析执行完毕,才会继续HTML的渲染过程。原因是因为JS有可能修改DOM结构,这就意味着JS执行完成前,后续所有资源的下载是没有必要的,这就是JS阻塞后续资源下载的根本原因。CSS文件的加载不影响JS文件的加载,但是却影响JS文件的执行。JS代码执行前浏览器必须保证CSS文件已经下载并加载完毕。

6、连接结束(TCP四次挥手)

TCP和UDP区别:
TCP:

TCP是可靠的,面向连接的传输方式,TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资。

缺点:

效率低,占用资源多,在传递数据的时候,需要建立连接,会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间。因为每个连接都会占用系统的CPU、内存等硬件资源。因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

UDP:

UDP是不可靠的,无连接的传输方式,但是传输方式快,效率高,因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

应用:

  • 如果需要将数据准确无误的传递对方,需要采用可靠的传输,例如: 发送邮件等…
  • 如果允许数据的少许丢失,并且尽可能快速传递时,这时可以采用UDP传输。例如: 语音通话、视频通话等…

参考资料:浅谈HTTP中Get与Post的区别 - hyddd - 博客园 (cnblogs.com)

参考资料:https://www.nowcoder.com/discuss/807702?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack.

你可能感兴趣的:(计算机网络,网络协议,http)