fideloper / conditionalrequest
使用请求中的 If-* 标头处理 HTTP 验证缓存
Requires
- php: >=5.3.0
- illuminate/database: 4.0.x
- illuminate/support: 4.0.x
- symfony/http-foundation: 2.3.*
Requires (Dev)
- mockery/mockery: 0.7.2
- phpunit/phpunit: 3.7.*
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 请求
- 允许验证缓存(使用 ETag 与 If-Match、If-None-Match,以及 Last-Modified 与 If-Modified-Since、If-Unmodified-Since 标头)
- 帮助开发者了解 HTTP 和缓存,这是一个常被忽视的话题
安装
这是一个 Composer 软件包,可在 Packagist 上找到。
要安装它,编辑您的 composer.json 文件并添加
{ "require": { "fideloper/conditionalrequest": "dev-master" } }
默认安装将包括一些 Symfony 和 Laravel(Illuminate)库。然而,这些库不一定需要使用。
安装
$ composer install
使用 Phpunit 和 Mockery 进行安装,以便进行修改
$ composer install --dev
可用方法
- 使用 ( ResourceInterface $resource ) - 使用 ResourceInterface,它会自动设置 ETag 和/或 Last Modified 日期
- setEtag ( string $etag ) - “手动”设置实体的 ETag
- setLastModified * ( DateTime $lastModified ) - “手动”设置实体的最后修改日期
- bool doGet () - 确定您的应用程序是否应该使用实体(资源)响应 GET 请求或响应
304 Not Modified
- bool doUpdate () - 确定您的应用程序是否应该更新 PUT/POST 请求中的实体/资源或响应
412 Precondition Failed
基本用法
- Laravel/Symfony
- Zend [未来]
- "纯" PHP [未来]
更多用法
有关更完整的使用示例和说明,请参阅 Wiki。
一些说明
有几种缓存类型
- 应用程序内缓存(Memcache、Redis、其他内存存储)
- HTTP 缓存 - 网关、代理和私有(即浏览器和类似设备)
使响应(网页、API 响应等)可由第三方缓存是 HTTP 缓存机制的一部分。您使用的缓存机制取决于您的用例。
HTTP 规范定义了两种 HTTP 缓存方法
- 验证 - 通过不需要源服务器发送完整的消息正文(仅发送头信息)来节省带宽
- 过期 - 为了节省往返源服务器的次数 - 缓存可以潜在地直接提供服务响应,从而节省源服务器甚至不知道请求的机会
验证缓存
使用 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和其他头部信息进行的过期缓存可以帮助缓存响应以供下一个用户(甚至一个特定用户)使用,从而减轻您的服务器(或服务器群)的流量负载。