这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
一、什么是HTTP
超文本传输协议,应用层协议、基于TCP。请求/响应。简单可扩展、无状态。
二、发展
1、0.9单行协议 请求GET 响应HTML文档
2、1.0构建可扩展性 增加了header、状态码、支持多文档类型
3、1.1标准化协议 连接复用、缓存、内容协商
4、2更优异的表现 二进制协议、头部压缩、服务端推送... 更快、更稳定、更简单 帧:HTTP2通信的最小单位,每个帧包含帧头 消息:与逻辑请求或响应信息对应的完整的一系列帧 数据流:已建立的连接内双向字节流,可以承载一条或多条信息 交错发送,接收方重组织 连接永久,且仅需要每个来源一个连接。 流控制:阻止服务器向浏览器发送大量数据的机制 服务器主动推送一些信息给客户端
5、3草案
三、请求方法
1、安全:不会修改服务器的数据的方法 GET\HEAD\OPTIONS
2、幂等:同样的请求被执行一次与连续执行多次的效果一致,服务器状态也一致。 所有安全的方法都是幂等的 GET HEAD OPTIONS PUT DELETE
四、状态码
1请求已接收、继续处理
2 成功
3 重定向,完成请求必须有进一步操作
4客户端错误
5服务端错误
*504 Gateway Timeout网关或代理服务器无法在规定的时间内获取想要的响应
* RESTful API 一种api设计风格
(1)每一种URI代表一种资源
(2)客户端和服务器之间,传递这种资源的某种表现层
(3)客户端通过HTTP方法,对服务端资源进行操作,实现“表现层状态转化”
五、常用请求头
1、Accept 接受类型,表示浏览器支持的MIME类型(对标服务器返回的Content-Type)
2、Content-Type 客户端发出去内容的类型
3、Cache-Control 指定请求和响应遵循的缓存机制
4、If-Modeified-Since,对于服务端的Last-Modified,用于匹配查看文件是否变动(只能精确到1s之内)
5、Expires缓存控制,在这个时间内不会请求,直接使用缓存、服务端时间。
6、Max-age 代表资源在本地缓存多少秒,有效时间内都不会请求,而是使用缓存
7、If-None-Match 对应服务端的Etag,用来匹配文件内容是否改变(非常精确)
8、Cookie有cookie并且同域访问时会自动带上
9、Referer 该页面的来源url(适用于所有类型的请求,会精确到详细的页面地址,csrf拦截常用到这个字段)
10、Origin 最初的请求从哪里发起(仅精确到端口,比referer更尊重隐私) 11、User-Agent 用户客户端的一些必要信息,如UA头部等
六、常见响应头
1、Content-Type 服务端返回的实体内容的类型
2、Cache-Control 指定请求和响应遵循的缓存机制
3、Last-Modified 资源最后修改的时间
4、Expires 到期时间
5、Max-age 代表资源在本地缓存多少秒,开启了cach-conctrol后有效
6、Etag 资源的特定版本标识符
7、Set-Cookie 设置与页面相关联的cookie,服务器通过这个头部把cookie传给客户端
8、Server 服务器相关信息
9、Access-Control-Allow-Origin 服务端允许的请求origin头部
七、缓存
1、强缓存
本地使用
(1)Expires
(2)Cache-Control no-cache:协商缓存验证
no-store:不用任何缓存
max-age:存储的最大周期
2、协商缓存
与服务器协商
If-None-Match/Etag 资源的特定版本标识符,一般为字符串
If-Modeified-Since/Last-Modified 资源最后修改的时间
优先级:强缓存(Cache-Control > Expires)>协商缓存(If-None-Match/Etag > If-Modeified-Since/Last-Modified )
八、Cookie Set-Cookie
1、Name=value 各种cookie的名称和值
2、Expires=Date Cookie有效期,缺省时Cookie仅在浏览器关闭之前有效
3、Path=Path 限制指定Cookie的发送范围的文件目录,默认为当前
4、Domain=domain 限制cookie生效的域名,默认为创建cookie的服务域名
5、secure 仅在HTTPS安全连接时,才可以发送Cookie
6、HttpOnly js脚本无法获得Cookie
7、SameSite=[None|Strict|Lax] 同站策略(防止跨站脚本攻击)
None:同站、跨站请求都可以发送
Strict:仅在同站发送
Lax;允许与顶级导航一起发送,并将与第三方网站发起的get请求一同发送
九、HTTPS 经过tsl/ssl加密
对称加密
非对称加密