0

我正在使用 slim 框架 2来获取etag()缓存数据,一切正常HTTP 200 OKHTTP 304

下面是我的苗条 api:

 $app->get('/getNew', function () use ($app){
     $app->etag('uniqueEtag12');
    echo "I am updated one";
  });

我不知道为什么每次我200 OK在其余客户端中获取响应代码时,因为我在响应中获取缓存数据,下面是我的其余客户端响应快照

在此处输入图像描述

为什么这个状态码总是200 OK为什么我没有得到状态码304请帮助我

4

1 回答 1

0

etag()方法做了两件事:

  1. 将标头添加ETag到响应中
  2. 如果客户端发送If-None-Match带有值的标头,则发送 304 状态响应uniqueEtag12

因此,我认为您的请求不包含If-None-Match标头。

示例代码:

索引.php:

<?php
require 'vendor/autoload.php';

$app = new \Slim\Slim();

$app->get('/hello', function () use ($app) {
    $app->etag('1234');
    echo "Hello world on " . date("Y-m-d H:i:s");
});


$app->run();

使用 curl 进行测试。

没有If-None-Match标题:$ curl -i http://localhost:8888/hello

HTTP/1.1 200 OK
Host: localhost:8888
Connection: close
X-Powered-By: PHP/7.0.15
Content-type: text/html;charset=UTF-8
Etag: "1234"

Hello world on 2017-05-04 07:12:40

带有If-None-Match标题:

$ curl -i http://localhost:8888/hello -H 'If-None-Match: "1234"'
HTTP/1.1 304 Not Modified
Host: localhost:8888
Connection: close
X-Powered-By: PHP/7.0.15
Etag: "1234"
于 2017-05-04T06:50:10.307 回答