3

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

本地主机头:

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
4

1 回答 1

2

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

CloudFlare 帮助

解决方案/解决方法 - 如果您向资源添加文件扩展名,使其与我们支持的文件扩展名列表匹配,则http://example.com/test/dynamicallyimage.php?size=3 变为http://example.com /dynamicallyimage.jpg 只要您还发送 HTTP 1.0 作为协议,CloudFlare 的系统就会将其与 content-length 标头一起发送。

或者,您可以使用 PageRule 并使用“自定义缓存”选项来选择“缓存所有内容”,这将强制我们的系统缓存http://example.com/test/dynamicallyimage.php?size=3,即使它没有具有我们常用的文件扩展名之一——在这种情况下,内容长度也将被保留。

于 2015-08-19T18:08:03.727 回答