HTTP、HTTPS、HTTP2

首先我们看一些基础

五层模型

从下往上

物理层

主要是定义物理设备如何传输数据

数据链路层

在通信的实体间建立数据链路连接

网络层

为数据在节点之间传输创建逻辑链路
IP 协议就是在这一层

传输层

向用户提高可靠的端到端(End-to-End)服务
传输层向高层屏蔽了下层数据通信的细节
tcp,udp就在这一层

应用层

为应用软件提供了很多服务
屏蔽网络传输相关细节
http,ftp协议在这一层

http发展历史

http/0.9

只有一个命令GET
没有header等描述数据的信息
服务器发送完毕,就关闭了tcp连接

http/1.0

增加了很多命令
增加了status code和header
多字符集支持,多部分发送,拥有了权限、缓存等功能

http/1.1

支持持久连接
pipeline
增加host和其他一些命令
(我们现在用的大部分是http1.1)

http2

所有数据以二进制方式传输
同一个连接里面发送多个请求不在需要按照顺序来
头信息压缩以及推送等提高效率的功能

http属性

http code

定义服务器对请求的处理结果
各个区间的code有各自的语义
好的http服务可以通过code判断结果

content type

text/plain
application/json
multipart/form-data
application/x-www-form-urlencoded

Cache-Control

可缓存属性

public private nocache

到期属性

max-age=< seconds>
s-maxage=< seconds>(针对代理服务的缓存)
max-stale=< seconds>

重新验证

must-revalidate
proxy-revalidate

其他

no-store
no-transform

请求流程

发送一个http请求,先看浏览器本地是否有缓存,有而且没过期就返回。如果没有缓存,看代理服务器是否有缓存,有就返回,没有才最终请求后端。
客户端—>浏览器是否有缓存–>代理服务器是否有缓存–>后端服务器

验证头

Last-Modified

上次修改时间
配合If-Modified-Since或者If-Unmodified-Since使用
对比上次修改时间以验证资源是否有必要更新

Etag

数据签名
配合If-Match或者If-Non-Match使用
对比资源的签名判断是否使用缓存

Cookie和Session

Cookie

通过Set-Cookie设置
下次请求会自动带上
键值对,可以设置多个
max-age和expires设置过期时间
Secure只有在https的时候发送
HttpOnly无法通过document.cookie访问:防止xss跨站脚本攻击。

数据协商

分为请求和返回两类
Accept
Accept-Encoding
Accept-Language
User-Agent
Content-Type
Content-Encoding
Content-Language

Content-Security-Policy

csp

作用

限制资源获取
报告资源获取越权

资源类型

connect-src manifest-src img-src font-src media-src frame-src script-src style-src

限制方式

default-src限制全局
指定资源类型:如 img-src

举例

‘Content-Security-Policy’:‘default-src ‘self’’
详细介绍:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

https

https 握手过程

在这里插入图片描述

1、首先客户端生成随机数,并把能够支持的加密算法发送到服务端
2、服务端也生成随机数,确认加密算法并返回给客户端(在此同时证书也传递给过去)
3、客户端又生成了随机数(现在一共生成三个随机数了),使用公钥加密生成预主密钥,并发送到服务端
4、服务端使用私钥解密出预主密钥。解密成功,使用之前生成的三个随机数和公钥生成会话秘钥传给客户端
5、客户端又用之前生成的三个随机数和公钥生成回话秘钥传给服务端,
6、他们的通讯开始,能够使用会话秘钥加密和解密数据
简单图解:
在这里插入图片描述

给nginx加上https:

在这里插入图片描述
涂掉的是证书的位置
转发原来的页面到https:
在这里插入图片描述

http2

优势

信道复用
分帧传输
Server Push
(server push的话可以在原来返回的代码里面添加响应头部:link:’</test.jpg>;as-image;rel=preload’加载数据之后既会服务端就会自己把数据推送过来)

nginx添加http2

在nginx里面添加http2是最方便的改变我们的传输为http2的方法,完全不需要修改别代码
只需要在server里面
listen 443后面加一个http2也就是这样:
listen 443 http2;
然后要想server_push,在server里面添加http2_push_preload on;

判断http2 的效率

https://http2.akamai.com/demo/http2-lab.html
测试这一个,点击进去,
在这里插入图片描述
我们可以感受http2的速度:
在这里插入图片描述

网页请求的过程:

从前端角度来看:
在这里插入图片描述
redirect的目的是看看之前是否设置了301永久跳转,是的话跳转。
然后才去读缓存,缓存读不到就dns找到域名的ip然后建立tcp连接去请求。

猜你喜欢

转载自blog.csdn.net/fst438060684/article/details/84864748