我刚刚开始使用CloudFlare并且遇到了它的CDN服务问题。我希望我的脚本发送回Content-Type标头。我曾尝试使用页面规则,但没有帮助。我只想获得内容长度!
PHP脚本:
<?php
ob_start();
ob_start('ob_gzhandler');
$file = $_SERVER['DOCUMENT_ROOT'] . "/MyPath.txt"; //Path to your *.txt file
$contents = file($file);
$string = implode($contents);
echo $string;
ob_end_flush(); // The ob_gzhandler one
header('Content-Length: '.ob_get_length());
ob_end_flush(); // The main one
?>
CloudFlare的响应标题:
HTTP/1.1 200 OK
Date: Wed, 19 Aug 2015 17:29:33 GMT
Content-Type: text/html
Connection: close
Set-Cookie: __cfduid=d47ae5690afc8da407e829810c558510b1440005373; expires=Thu, 1
8-Aug-16 17:29:33 GMT; path=/; domain=.mysite.com; HttpOnly
X-Powered-By: PHP/5.5.28
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=f7b9cb0b5e9bf7e9af1d732e566a1e24; path=/
Server: cloudflare-nginx
CF-RAY: 218794cf540e0436-ORD
LocalHost Header:
HTTP/1.1 200 OK
Date: Wed, 19 Aug 2015 17:39:10 GMT
Server: Apache/2.4.9 (Win64) PHP/5.5.12
X-Powered-By: PHP/5.5.12
Set-Cookie: PHPSESSID=s3hdkbh4vd2rj5ieqocafebju6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 135680
Connection: close
Content-Type: text/html
答案 0 :(得分:2)
您需要添加文件扩展名以便缓存脚本的输出,或使用页面规则强制缓存资源。这将导致不使用分块编码发送文件,这将启用内容长度标题。
解决方案/解决方法 - 如果您向资源添加文件扩展名,使其与我们支持的文件扩展名列表相匹配,以便http://example.com/test/dynamicallyimage.php?size=3成为http://example.com/dynamicallyimage.jpg CloudFlare的系统将以内容长度发送它只要您还发送HTTP 1.0作为协议。
或者您可以使用PageRule并使用“自定义缓存”选项选择“缓存所有内容”,这将迫使我们的系统缓存http://example.com/test/dynamicallyimage.php?size=3,即使它没有我们常用的文件扩展名 - 在这种情况下,内容长度也将被保留。