网络、浏览器

本文详细解释了DNS解析过程,HTTP2与HTTP1的区别,如何实现有状态的HTTP协议,浏览器的强缓存与协商缓存策略,以及TCP三次握手和四次挥手的原理。还对比了HTTPS与HTTP的安全性和工作原理,以及TCP和UDP的主要区别。
摘要由CSDN通过智能技术生成

网络、浏览器

dns解析

  1. 客户端通过浏览器访问域名http://www.baidu.com网址,发起查询该域名ip地址的DNS请求.。该请求发送到本地DNS服务器会首先查它的缓存记录,如果缓存中有记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS跟服务器进行查询。
  2. 本地DNS服务器向根服务器发送DNS请求。
  3. 根服务器经过查询,没有记录该域名及IP地址的对应关系,但是会告诉本地 DNS 服务器,可以到域名服务器上继续查询,并给出域名服务器的地址(.com 服务器)。
  4. 本地 DNS 服务器向 .com 服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
  5. .com 服务器收到请求后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,该域名可以在 baidu.com 域名服务器上进行解析获取 IP 地址,并告诉 baidu.com 域名服务器的地址。
  6. 本地 DNS 服务器向 baidu.com 域名服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
  7. baidu.com 服务器收到请求后,在自己的缓存表中发现了该域名和 IP 地址的对应关系,并将IP地址返回给本地 DNS 服务器。
  8. 本地 DNS 服务器将获取到与域名对应的 IP 地址返回给客户端,并且将域名和 IP 地址的对应关系保存在缓存中,以备下次别的用户查询时使用
    在这里插入图片描述

http2和http1的区别

1、HTTP2使用的是二进制传送,HTTP1.X是文本(字符串)传送。二进制传送的单位是帧和流。帧组成了流,同时流还有流ID标示

2、HTTP2支持多路复用。因为有流ID,所以通过同一个http请求实现多个http请求传输变成了可能,可以通过流ID来标示究竟是哪个流从而定位到是哪个http请求

3、HTTP2头部压缩。HTTP2通过gzip和compress压缩头部然后再发送,同时客户端和服务器端同时维护一张头信息表,所有字段都记录在这张表中,这样后面每次传输只需要传输表里面的索引Id就行,通过索引ID查询表头的值

4、HTTP2支持服务器推送。HTTP2支持在未经客户端许可的情况下,主动向客户端推送内容

如何实现有状态的http协议
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。
用户登录后,切换到其他界面,进行操作,服务器端是无法判断是哪个用户登录的。 每次进行页面跳转的时候,得重新登录。使用Cookie session来实现有状态的http协议

浏览器缓存策略(强缓存与协商缓存)

	浏览器缓存指的是:当客户端向服务器请求资源时,会先查看浏览器缓存,如果浏览器有“需要请求资源”的副本,就可以直接在浏览器中提取,就不需要请求服务器。
	需要注意的是,常见的浏览器缓存只能缓存GET请求的资源,所以下面说的请求缓存皆是指GET请求。
	浏览器缓存分类:根据是否需要向服务器发起请求把http缓存分为两个大类,强缓存和协商缓存。
	
	第一次请求资源时,客户端向服务器请求资源,服务器返回响应资源,并在response header中回传资源的缓存参数;
	第二次请求资源时,浏览器判断这些请求参数,命中强缓存就返回200,使用磁盘缓存中的资源,不请求服务器,否则就把请求参数加到request header中传给服务器,看是否命中协商缓存,命中则返回304,使用缓存资源,若都没命中则服务器会返回新的资源。
强缓存

强缓存是通过设置缓存的到期时间 expires 或者有效时间 max-age ,在有效时间内,缓存不会失效,浏览器直接从浏览器缓存中读取资源。当缓存数据库中没有所请求的资源,或所请求的资源已失效时,才会从服务端请求资源。

与强制缓存相关的请求响应头:

  • Expires
    响应头,代表该资源的过期时间。但由于服务端时间和客户端时间可能有误差,这也将导致缓存命中可能有误差,另一方面,Expires是HTTP1.0的产物,故现在大多数使用Cache-Control替代。

  • Cache-Control(优先级高于Expires)
    请求/响应头,缓存控制字段,精确控制缓存策略。 Cache-Control有很多属性,不同的属性代表的意义也不同。
    1、private:客户端可以缓存
    2、public:客户端和代理服务器都可以缓存
    3、max-age=x:缓存内容将在x秒后失效
    4、no-cache:不能直接使用缓存,要求向服务器发起请求
    5、no-store:所有内容都不会缓存

  • pragma
    pragma 是一个在 HTTP/1.0 中规定的通用首部。设置为no-cache与 Cache-Control: no-cache 效果一致,优先级高于cache-control和expires,即三者同时出现时,先看pragma -> cache-control -> expires。

协商缓存

协商缓存需要在服务器端对比资源是否修改,来判断是否可以使用缓存。若未改动,则返回304状态码,浏览器拿到此状态码就可以直接使用缓存数据了。否则服务器返回新资源。

由此可见,在协商缓存中,如何判断资源是否改动就尤为重要啦,现在主要有两种策略:Last-Modified 和 Etag

  • etag:每个文件有一个,改动文件了就变了,就是个文件hash,每个文件唯一。
  • last-modified:文件的修改时间,精确到秒

ETag和Last-Modified的作用和用法,他们的区别:

1.Etag要优于Last-Modified。Last-Modified的时间单位是秒,如果某个文件在1秒内改变了多次,那么他们的Last-Modified其实并没有体现出来修改,但是Etag每次都会改变确保了精度;

2.在性能上,Etag要逊于Last-Modified,毕竟Last-Modified只需要记录时间,而Etag需要服务器通过算法来计算出一个hash值;

3.在优先级上,服务器校验优先考虑Etag。

浏览器缓存过程

1.浏览器第一次加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并把response header及该请求的返回时间一并缓存;

2.下一次加载资源时,先比较当前时间和上一次返回200时的时间差,如果没有超过cache-control设置的max-age,则没有过期,命中强缓存,不发请求直接从本地缓存读取该文件(如果浏览器不支持HTTP1.1,则用expires判断是否过期);如果时间过期,则向服务器发送header带有If-None-Match和If-Modified-Since的请求

3.服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;;

4.如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回200;

不同的网页刷新操作

我们将访问和刷新分为以下三种情况:

标签进入、输入url回车进入:按照指定的缓存策略去操作
按刷新按钮、F5刷新、网页右键“重新加载”:强缓存失效,直接判断协商缓存
ctrl+F5强制刷新:所有缓存失效,重新请求服务器数据

TCP三次握手为什么不能两次

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

Tcp为什么是4次挥手

这个因为第一次挥手表示客户端发送了一个fin的包,表示客户端已发送数据完毕,但是服务端这个时候可能还有数据没有发送完成,先发送给客户端一个ask的包,等待自己的数据发送完成才能向客户端发送一个 fin的包,表示自己的数据也已发送完成。这样中间就必须为两次来发送ask和fin。

HTTPS和HTTP的主要区别

https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

TCP和UDP的区别

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次“对话”才能建立起来
UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证

  • 30
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蹦跶哒哒哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值