基本知识
zKing 2018-11-19 HTTP
# HTTP1.1 和 HTTP2 的改动
# HTTP1.1 新改动
- 持久连接
- 请求管道化
- 增加缓存处理(新的字段如 cache-control)
- 增加 Host 字段、支持断点传输等
# HTTP2 新改动
- 二进制分帧传输
- 多路复用 (信道复用)
- 头部压缩
- 服务器推送
# 版本变动产生的变化
- 在 HTTP1.0 中,发送一次请求时,需要等待服务端响应了才可以继续发送请求。
- 在 HTTP1.1 中,发送一次请求时,不需要等待服务端响应了就可以发送请求了,但是回送数据给客户端的时候,客户端还是需要按照响应的顺序来一一接收
- HTTP2 所有性能增强的核心在于新的二进制分帧层(不再以文本格式来传输了),它定义了如何封装 http 消息并在客户端与服务器之间传输。HTTP2 发送的请求是可以并发的,服务端回送数据给客户端的时候,客户端不需要按照响应的顺序来一一接收
# HTTP 长连接
- 从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:
Connection:keep-alive
- 在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
- HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。
# HTTP 数据协商
- Accept-Encoding,列出用户代支持的压缩方法。常用 gzip
- Accept-Language 列出用户代理期望的页面语言
- Content-Type 指示服务器文档的 MIME 类型。帮助用户代理(浏览器)去处理接收到的数据。
- 还有很多,详情见 参考文档
# 关于浏览器与网站建立 TCP 连接(三次握手)
- HTTP 只有请求和响应,传输是由 TCP 三次握手进行的
- 三次握手是为了防止服务端开启无用的连接,即为了防止网络延迟而导致的服务器开销的问题
# URI,URL,URN
# URI
Uniform Resource Identifier,即统一资源标志符,用来唯一的标识一个资源。 包含 URL 和 URN
# URL
Uniform Resource Locator,统一资源定位符。即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。
# URN
- Uniform Resource Name,统一资源命名。即通过名字来表示资源的。
- 目的是做到“在资源移动之后还能被找到”,但是目前还没有非常成熟的使用方案
# HTTP 报文
# 基本格式
# HTTP 方法
# HTTP 状态码
- 定义服务器对请求的处理结果
- 各个区间的 code 有各自的语义
- 好的 HTTP 服务可以通过 code 判断结果
常见的状态码请点击 这里 查看
# HTTP Redict(重定向)
- 重定向,其实是两次 request
- 第一次,客户端 request A,服务器响应,并 response 回来,告诉浏览器,你应该去 B。
- 第二次,客户端 request B
在第一次 request 时,服务器会 response http 状态码给浏览器,而 HTTP 协议的重定向响应的状态码为 3xx 。
- 301,永久重定向,使用需要谨慎
- 302,临时重定向,由于不可预见的原因该页面暂不可用。在这种情况下,搜索引擎不会更新它们的链接。
- 304 Not Modified,缓存刷新:该状态码表示缓存值依然有效,可以使用。即强缓存
# Cookie 和 Session
# Cookie
- 通过 Set-Cookie 设置
- 下次请求会自动带上 Cookie
- Cookie 是使用键值对的方式,可以设置多个
- max-age 和 expires 设置 Cookie 过期时间
- Cookie 设置 Secure 属性就只能在 https 的时候发送
- Cookie 设置 HttpOnly 就无法通过 document.cookie 访问
# Session
- 读取 Cookie 里用户的值 key
- 然后根据这个 key 进行操作
# CSP --Content security policy(内容安全策略)
CSP 的主要目标是减少和报告 XSS 攻击
# 作用
- 限制资源获取
- 报告资源获取越权
# 限制方式
- default-src 限制全局
Content-Security-Policy: default-src 'self'
- 制定资源类型
- 详情见 参考文档