【问题标题】:Slim Framework 2 - Not getting HTTP 304 code with etag()Slim Framework 2 - 没有使用 etag() 获取 HTTP 304 代码
【发布时间】:2017-04-21 11:12:55
【问题描述】:

我正在使用 slim 框架 2 etag() 来获取缓存数据,一切正常当数据来自缓存时应该是HTTP 304

下面是我的瘦 api:

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

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

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

【问题讨论】:

    标签: php http http-headers slim slim-2


    【解决方案1】:

    etag() 方法做了两件事:

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

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

    示例代码:

    index.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"
    

    【讨论】:

    • 但我正在获取缓存值
    • HTTP 请求中是否有If-None-Match 标头?
    • 这就是没有 304 的原因。etag() 中的 code 会查找该标头。
    • @Rob Allen 你能在你的回答中给我一个代码示例
    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2017-03-22
    • 2021-11-25
    • 2018-06-17
    相关资源
    最近更新 更多