前言
http例子:
-
输入url打开网页
-
ajax获取数据
-
img标签加载图片
cache-control
Cache-Control:max-age=100 ##设置对应的静态资源缓存100s(设置缓存过期时间为100s)
通过给Cache-Control
-
设置public、private来控制是只能在客户端进行缓存,还是可以通过代理服务器进行缓存
-
设置must-revalidate在缓存过期之后必须要到服务端验证过才能继续使用缓存
-
设置no-cache、no-store可以控制我们是否使用缓存
缓存验证:(缓存的可用性)
缓存是存储在客户端的,客户端并不知道服务端是否有改变缓存的这部分数据,缓存有时候就需要进行一个验证
-
通过last-modified配合if-modified-since进行验证
-
通过etag配合if-none-match来来进行验证
总结:
不要以为缓存知识只有Cache-Control:max-age=100 来设置过期时间,缓存是web服务中对性能提升最大的一环
所以深入理解http缓存对web开发不论是前端人员或者后端人员都非常重要
更多有意义的头(http的头)
-
Content-Type、Content-Encoding等来约束数据类型
-
cookie保持会话信息(常见的session方案就是通过cookie来进行一个实现)
-
CORS实现跨域并保持安全性限制(如果跨域的服务对所有人进行开放,那么每个人都能进行访问,因此可能受到违法连接)
深入tcp
-
什么是三次握手
-
https链接的创建过程,以及为什么https就是安全的
-
什么是长链接,为什么需要长链接
-
http2的信道复用有为什么能提供性能
带来好处
-
对于后端开发,你能够打造性能更好的http服务
-
对于前端开发,你能够好得使用http的特性帮助你进行开发
-
能够帮助前后端更好的协作
基础:
-
知道HTTP概念,知道html是什么,浏览器是怎么样的一个东西,有web服务存在,浏览器通过和web服务沟通才能拿到数据
-
想要深入学习http
浏览器输入url后http请求返回的完整过程
浏览器的api里面的一个performance,performance会记录所有的时间点,时间过程的消耗会通过api进行记录
可以知道哪一个时间点耗时很长,可以对此时间点进行优化
请求过程解析:(数据加载过程时间点)
-
发起请求:浏览器输入url -->
-
redirect:浏览器记录这个地址已经永久的跳转到一个新的地址,所以一开始浏览器需要判断一下需不需要进行redirect以及要redirect到哪里 -->
-
看缓存(App cache):可能请求的资源已经缓存过了,要看app cache缓存里是否有,如果没有缓存就要去实际的服务器那边去请求资源---->
-
DNS(DNS查找):因为输入的是域名,域名要对应成ip之后,我们才能真正的访问到服务器,需要查找域名对应的ip地址,这一步是dns解析--->
-
TCP链接:DNS解析到了ip之后,要创建TCP链接,创建TCP链接要经过TCP的三次握手之后,才能真正的把链接创建起来,如果这个请求是https的,那么要创建一个https的链接,和TCP的三次握手不一样,中间要有一个保证安全的数据传输过程---->
-
Request(发送请求包):链接创建好之后才发送一个http的请求数据包---->
-
Response(接收响应) :请求包发送之后,服务器接收到这个数据,进行一个数据操作之后,返回我们这个请求想要的内容,开始返回数据,返回数据之后,这个请求才真正的完成
网络协议分层
网络传输过程:
http协议在应用层上,但是基于传输层的TCP协议,ip是网络层
低三层(web应用不太涉及,了解一下)
-
物理层主要作用是定义物理设备如何传输数据(网卡、端口、网线传输数据)
-
数据链路层在通信的实体间建立数据链路连接 (010101)
-
网络层为数据在结点之间创建逻辑链路
传输层:
TCP协议,udp协议
-
向用户提供可靠的端到端(End-to-End)服务:建立了客户端到baidu服务端的链接之后,二者两端如何去传输数据,传输数据的方式是在这一层进行定义的,如传数据数据可能很小可能很大,如果传输的数据很大,不能一次性传输,要对数据进行分包、分片,传输到客户端之后,要组装数据,这一个过程的定义,是在传输层定义的
-
传输层向高层屏蔽了下层数据通信的细节:http协议是是实现在TCP/IP协议基础上的,http协议传输数据只需要在浏览器上输入一个url,就自动发送一些相关的数据到服务器端,服务器端解析请求数据返回结果给浏览器端,然后浏览器把