Vimeo API 没有响应 "If-Modified-Since" header
Vimeo API not responding to "If-Modified-Since" header
The If-Modified-Since header enables you to return only those API resources that have been modified since a particular date and time.
The header looks like this:
If-Modified-Since: {ddd}, {D} {MMM} {YYYY} {HH}:{mm}:{ss} {Z}
NOTE: If your formatting codes are rusty, Tue, 20 Jun 2023 14:42:36 GMT is an example.
If none of the resources have been modified since this date, the API returns an empty response body and the HTTP status 304 Not Modified.
我正在使用 Official PHP library for the Vimeo API.
根据GitHub issue #130, the PHP library's request()
method accepts an array of headers. And this commit显示了$headers
数组是如何传递和解析的:
public function request($url, $params = array(), $method = 'GET',
$json_body = true, array $headers = array())
// Set the headers
foreach ($headers as $key => $value) {
$curl_opts[CURLOPT_HTTPHEADER][] = sprintf('%s: %s', $key, $value);
}
但是当我通过示例中显示的未来日期时,我仍然收到完整的视频列表,而不是文档中指定的 "empty response body and the HTTP status 304 Not Modified"。
我做错了什么?
$fields = array(
'created_time',
'modified_time'
);
$params = array(
'page' => $page,
'filter' => 'embeddable',
'filter_embeddable' => true,
'fields' => implode(',',$fields)
);
$headers = array(
'If-Modified-Since' => 'Tue, 20 Jun 2023 14:42:36 GMT'
);
$json_body = true;
$method = 'GET';
$response = $vimeo->request('/me/videos', $params, $method, $json_body, $headers);
结果:
Array
(
[0] => Array
(
[created_time] => 2018-06-05T19:27:18+00:00
[modified_time] => 2018-06-29T19:12:21+00:00
)
[1] => Array
(
[created_time] => 2016-06-02T03:01:40+00:00
[modified_time] => 2019-04-30T06:15:29+00:00
)
[2] => Array
(
[created_time] => 2016-05-29T05:31:46+00:00
[modified_time] => 2019-04-25T07:46:53+00:00
)
....
编辑
基于 this answer(与 Vimeo 无关),似乎 API 可能 return 整个视频集,即使其中一个在 [=65] 之后被修改=] 日期.
If anything has changed in the entire response, then it will send the entire response to you.
但如果日期是未来的日期,我仍然希望结果为空。我是不是误会了?
编辑
Tom 建议 Vimeo API 忽略将来设置的 "If-Modified-Since" header。我最近尝试设置我的,但我仍然得到在该日期之前修改的结果:
$vimeo = new \Vimeo\Vimeo(false,false,$access_token);
$fields = array(
'modified_time'
);
$params = array(
'page' => 1,
'fields' => implode(',',$fields)
);
$method = 'GET';
$json_body = true;
$headers = array(
'If-Modified-Since' => 'Fri, 24 May 2019 14:42:36 GMT'
);
$response = $vimeo->request('/me/videos', $params, $method, $json_body, $headers);
echo"<pre>".print_r($response,true)."</pre>";
结果包括:
[21] => Array
(
[modified_time] => 2019-05-16T17:22:58+00:00
)
[22] => Array
(
[modified_time] => 2019-05-12T08:07:30+00:00
)
编辑
我错了。如上所述,我相信 整个响应 是 returned 如果 响应中的任何项目 自 "If-Modified-Since" 时间戳。这让 header 看起来好像不起作用。但是我将时间戳设置得尽可能接近当前时间,并且我确实收到了“304 Not Modified”响应,正如 Tom 在下面的回答中所报告的那样。其他人(内容制作者)也可以访问我正在测试的 Vimeo 帐户,但我不知道他们最近多久修改了内容。
Vimeo 没有记录,但我通过实验发现:
当If-Modified-Since
处于未来时,忽略。
否则,header 会按预期工作。但是请注意您的时区和可能的 clock-skew 几秒钟。
Vimeo 的修改时间显示在 API 响应中,在我的例子中:
"modified_time": "2019-05-22T09:52:45+00:00",
If-Modified-Since: Wed, 22 May 2019 09:56:25 GMT
returns 一个 304 Not Modified
我的情况。
我已向 Vimeo 提交支持请求以澄清或更改此行为。
The If-Modified-Since header enables you to return only those API resources that have been modified since a particular date and time.
The header looks like this:
If-Modified-Since: {ddd}, {D} {MMM} {YYYY} {HH}:{mm}:{ss} {Z}
NOTE: If your formatting codes are rusty, Tue, 20 Jun 2023 14:42:36 GMT is an example.If none of the resources have been modified since this date, the API returns an empty response body and the HTTP status 304 Not Modified.
我正在使用 Official PHP library for the Vimeo API.
根据GitHub issue #130, the PHP library's request()
method accepts an array of headers. And this commit显示了$headers
数组是如何传递和解析的:
public function request($url, $params = array(), $method = 'GET',
$json_body = true, array $headers = array())
// Set the headers
foreach ($headers as $key => $value) {
$curl_opts[CURLOPT_HTTPHEADER][] = sprintf('%s: %s', $key, $value);
}
但是当我通过示例中显示的未来日期时,我仍然收到完整的视频列表,而不是文档中指定的 "empty response body and the HTTP status 304 Not Modified"。
我做错了什么?
$fields = array(
'created_time',
'modified_time'
);
$params = array(
'page' => $page,
'filter' => 'embeddable',
'filter_embeddable' => true,
'fields' => implode(',',$fields)
);
$headers = array(
'If-Modified-Since' => 'Tue, 20 Jun 2023 14:42:36 GMT'
);
$json_body = true;
$method = 'GET';
$response = $vimeo->request('/me/videos', $params, $method, $json_body, $headers);
结果:
Array
(
[0] => Array
(
[created_time] => 2018-06-05T19:27:18+00:00
[modified_time] => 2018-06-29T19:12:21+00:00
)
[1] => Array
(
[created_time] => 2016-06-02T03:01:40+00:00
[modified_time] => 2019-04-30T06:15:29+00:00
)
[2] => Array
(
[created_time] => 2016-05-29T05:31:46+00:00
[modified_time] => 2019-04-25T07:46:53+00:00
)
....
编辑
基于 this answer(与 Vimeo 无关),似乎 API 可能 return 整个视频集,即使其中一个在 [=65] 之后被修改=] 日期.
If anything has changed in the entire response, then it will send the entire response to you.
但如果日期是未来的日期,我仍然希望结果为空。我是不是误会了?
编辑
Tom 建议 Vimeo API 忽略将来设置的 "If-Modified-Since" header。我最近尝试设置我的,但我仍然得到在该日期之前修改的结果:
$vimeo = new \Vimeo\Vimeo(false,false,$access_token);
$fields = array(
'modified_time'
);
$params = array(
'page' => 1,
'fields' => implode(',',$fields)
);
$method = 'GET';
$json_body = true;
$headers = array(
'If-Modified-Since' => 'Fri, 24 May 2019 14:42:36 GMT'
);
$response = $vimeo->request('/me/videos', $params, $method, $json_body, $headers);
echo"<pre>".print_r($response,true)."</pre>";
结果包括:
[21] => Array
(
[modified_time] => 2019-05-16T17:22:58+00:00
)
[22] => Array
(
[modified_time] => 2019-05-12T08:07:30+00:00
)
编辑
我错了。如上所述,我相信 整个响应 是 returned 如果 响应中的任何项目 自 "If-Modified-Since" 时间戳。这让 header 看起来好像不起作用。但是我将时间戳设置得尽可能接近当前时间,并且我确实收到了“304 Not Modified”响应,正如 Tom 在下面的回答中所报告的那样。其他人(内容制作者)也可以访问我正在测试的 Vimeo 帐户,但我不知道他们最近多久修改了内容。
Vimeo 没有记录,但我通过实验发现:
当If-Modified-Since
处于未来时,忽略。
否则,header 会按预期工作。但是请注意您的时区和可能的 clock-skew 几秒钟。
Vimeo 的修改时间显示在 API 响应中,在我的例子中:
"modified_time": "2019-05-22T09:52:45+00:00",
If-Modified-Since: Wed, 22 May 2019 09:56:25 GMT
returns 一个 304 Not Modified
我的情况。
我已向 Vimeo 提交支持请求以澄清或更改此行为。