Cloudflare内容类型

时间:2015-08-19 17:44:34

标签: php web cloudflare content-length http-content-length

我刚刚开始使用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

1 个答案:

答案 0 :(得分:2)

您需要添加文件扩展名以便缓存脚本的输出,或使用页面规则强制缓存资源。这将导致不使用分块编码发送文件,这将启用内容长度标题。

来自CloudFlare help

  

解决方案/解决方法 - 如果您向资源添加文件扩展名,使其与我们支持的文件扩展名列表相匹配,以便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,即使它没有我们常用的文件扩展名 - 在这种情况下,内容长度也将被保留。