HTTP

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。

  1. 用途
    • 会话状态管理(用户登录状态、购物车等其他需要记录的信息)
    • 个性化设置(自定义设置、主题等)
    • 浏览器行为跟踪(如跟踪分析用户行为等)
  2. 创建过程
    • 服务器发送的响应报文包含set-cookie首部字段,客户端得到响应报文后把cookie内容保存到浏览器中
    • 客户端之后对同一个服务器发送请求时,会在浏览器中取出Cookie信息并通过Cookie请求首部字段发送到服务器
  3. 分类
    • 会话期Cookie,浏览器关闭之后自动删除
    • 持久性Cookie,指定过期时间(Expires)或有效期时间(max-age)后,就成为了持久性Cookie
  4. Session

除了可以将用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信
息更加安全。

Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。

  1. 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首部字段没有指定不进行缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值