HTTP方法
- GET,获取资源
- HEAD,获取报文首部,主要用于确认URL的有效性,资源更新的时间等
- POST,传输数据
- PUT,上传文件,一般不用
- PATCH,对资源进行部分修改,PUT也允许修改资源,但是只能完全替代原资源,PATCH可以部分修改
- DELETE,删除文件
- OPTIONS,查询支持的方法
- CONNECT,要求在与代理服务器通信时建立隧道
- TRACE,追踪路径
HTTP状态码
- 100 Continue:表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应
- 200 OK
- 301 Moved Permanently :永久性重定向
- 302 Found:临时性重定向
- 400 Bad Request:请求报文中存在语法错误。
- 401 Unauthorized:该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进
行过一次请求,则表示用户认证失败。 - 403 Forbidden :请求被拒绝。
- 404 Not Found
- 500 Internal Server Error:服务器正在执行请求时发生错误。
- 503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
连接管理
- 短连接:每进行一次HTTP通信就要建立一次TCP连接
- 长连接:建立一次TCP连接,进行多次HTTP通信
Cookie
HTTP协议是无状态的,主要是为了让HTTP尽可能简单,使得它可以处理大量事务
Cookie是服务器发送到用户浏览器并保存在客户端的一小块数据,再次向通一服务器发送请求时被携带,用于告知服务端两个请求来自同一个浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来
额外的性能开销(尤其是在移动环境下)。
Cookie 曾一度用于客户端数据的存储,因为当时并没有其它合适的存储办法而作为唯一的存储手段,但现在随着现
代浏览器开始支持各种各样的存储方式,Cookie 渐渐被淘汰。新的浏览器 API 已经允许开发者直接将数据存储到本
地,如使用 Web storage API(本地存储和会话存储)或 IndexedDB。
- 用途
- 会话状态管理(用户登录状态、购物车等其他需要记录的信息)
- 个性化设置(自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
- 创建过程
- 服务器发送的响应报文包含set-cookie首部字段,客户端得到响应报文后把cookie内容保存到浏览器中
- 客户端之后对同一个服务器发送请求时,会在浏览器中取出Cookie信息并通过Cookie请求首部字段发送到服务器
- 分类
- 会话期Cookie,浏览器关闭之后自动删除
- 持久性Cookie,指定过期时间(Expires)或有效期时间(max-age)后,就成为了持久性Cookie
- Session
除了可以将用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信
息更加安全。
Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。
- Cookie 与 Session 选择
- Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选Session;
- Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
- 对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。
HTTPS
HTTP 有以下安全性问题:
- 使用明文进行通信,内容可能会被窃听;
- 不验证通信方的身份,通信方的身份有可能遭遇伪装;
- 无法证明报文的完整性,报文有可能遭篡改。
HTTPS 并不是新协议,而是让 HTTP 先和SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说HTTPS使用了隧道进行通信。
GET 和 POST 比较
作用
GET 用于获取资源,而 POST 用于传输实体主体。
参数
GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。
因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。
POST 参数支持标准字符集。
安全
安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。
GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。
安全的方法除了 GET 之外还有:HEAD、OPTIONS。
不安全的方法除了 POST 之外还有 PUT、DELETE。
幂等性
幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。幂等方法不应该具有副作用
所有的安全方法也都是幂等的。
在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。
可缓存
请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。
响应报文的状态码是可缓存的
响应报文的 Cache-Control首部字段没有指定不进行缓存。