fideloper/conditionalrequest

该软件包的最新版本(dev-master)没有可用的许可证信息。

使用请求中的 If-* 标头处理 HTTP 验证缓存

dev-master 2013-06-10 14:33 UTC

This package is auto-updated.

Last update: 2024-09-06 08:11:37 UTC


README

注意: 此库包含一些 HTTP 验证缓存 逻辑,这是 Symfony 包含的。具体来说,Symfony 可以“开箱即用”地处理条件 GET 请求。然而,此库还包含对并发控制(用于验证 POST 或 PUT 更新请求)的支持。

情况

框架很少提供工具来控制 HTTP 缓存机制,例如设置 ETags 或 Last-Modified 日期。

目标

此软件包旨在帮助您使用 验证缓存 机制处理条件 HTTP 请求

  1. 允许验证缓存(使用 ETag 与 If-Match、If-None-Match,以及 Last-Modified 与 If-Modified-Since、If-Unmodified-Since 标头)
  2. 帮助开发者了解 HTTP 和缓存,这是一个常被忽视的话题

安装

Build Status

这是一个 Composer 软件包,可在 Packagist 上找到。

要安装它,编辑您的 composer.json 文件并添加

{
    "require": {
        "fideloper/conditionalrequest": "dev-master"
    }
}

默认安装将包括一些 Symfony 和 Laravel(Illuminate)库。然而,这些库不一定需要使用。

安装

$ composer install

使用 Phpunit 和 Mockery 进行安装,以便进行修改

$ composer install --dev

可用方法

  1. 使用 ( ResourceInterface $resource ) - 使用 ResourceInterface,它会自动设置 ETag 和/或 Last Modified 日期
  2. setEtag ( string $etag ) - “手动”设置实体的 ETag
  3. setLastModified * ( DateTime $lastModified ) - “手动”设置实体的最后修改日期
  4. bool doGet () - 确定您的应用程序是否应该使用实体(资源)响应 GET 请求或响应 304 Not Modified
  5. bool doUpdate () - 确定您的应用程序是否应该更新 PUT/POST 请求中的实体/资源或响应 412 Precondition Failed

基本用法

  1. Laravel/Symfony
  2. Zend [未来]
  3. "纯" PHP [未来]

更多用法

有关更完整的使用示例和说明,请参阅 Wiki

一些说明

有几种缓存类型

  1. 应用程序内缓存(Memcache、Redis、其他内存存储)
  2. HTTP 缓存 - 网关、代理和私有(即浏览器和类似设备)

使响应(网页、API 响应等)可由第三方缓存是 HTTP 缓存机制的一部分。您使用的缓存机制取决于您的用例。

HTTP 规范定义了两种 HTTP 缓存方法

  1. 验证 - 通过不需要源服务器发送完整的消息正文(仅发送头信息)来节省带宽
  2. 过期 - 为了节省往返源服务器的次数 - 缓存可以潜在地直接提供服务响应,从而节省源服务器甚至不知道请求的机会

验证缓存

使用 if-* 标头(主要是 if-match、if-none-match、if-modified-since、if-unmodified-since)进行的验证缓存对于以下两点很有用

条件 GET 请求

服务器可以向请求返回“自您上次检查以来没有发生变化”。客户端随后知道使用其已知版本的资源(假设为先前请求的结果)。这对于移动API来说很好,因为可以通过条件请求节省重新发送消息体的带宽。

服务器可以正常响应资源,或者如果资源自客户端上次请求以来没有更新,则返回304 Not Modified响应。

并发控制

在PUT(或可能POST)请求中,服务器可以检查正在更新的资源是否自请求者上次检查以来已更改(解决了丢失更新问题)。这对于对资源进行大量写操作(更新)的API来说很好。

如果请求更新的客户端没有关于资源的最新知识,服务器可以响应412 Precondition Failed

这个库的代码旨在帮助进行验证和缓存。

过期缓存

使用Expires、Cache-Control、Last-Modified和其他头部信息进行的过期缓存可以帮助缓存响应以供下一个用户(甚至一个特定用户)使用,从而减轻您的服务器(或服务器群)的流量负载。