欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP协议之ETag

程序员文章站 2024-02-28 18:41:28
...

前言

在HTTP1.1规范中,新增了一个HTTP头信息:ETag;协商缓存。

作用

Etag是 Entity tag的缩写,可以理解为“被请求变量的实体值”,Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。所谓的服务端资源可以是一个Web页面,也可以是JSON或XML等。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。比如,浏览器第一次请求一个资源的时候,服务端给予返回,并且返回了ETag: “50b1c1d4f775c61:df3” 这样的字样给浏览器,当浏览器再次请求这个资源的时候,浏览器会将If-None-Match: W/“50b1c1d4f775c61:df3” 传输给服务端,服务端拿到该ETAG,对比资源是否发生变化,如果资源未发生改变,则返回304HTTP状态码,不返回具体的资源,节省服务器开销。比如七牛云就用到了ETag。

实现

php中间件

public function handle(Request $request, Closure $next)
{
    $key = \Cache::get($request->getBaseUrl());
    if ($key && $key === $request->header('If-None-Match')) {
        return \response(null, 304)->header('ETag', $key);
    }

    $response = $next($request);
    if ($key) {
        $response->header('ETag', $key);
    }

    return $response;
}
相关标签: http