通过删除Set-Cookie标头来利用nginx的代理缓存

前端之家收集整理的这篇文章主要介绍了通过删除Set-Cookie标头来利用nginx的代理缓存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是Google Chrome和Apple的Safari使用的WebKit开发工具中的错误导致的结果.我已经制作了一个 bug report with CrBug,然后在 WebKit Changeset 116952年确定了回归.我要感谢@Grumpy和@Matthieu Cormier,因为他们的帮助是跟踪这个.我等不及下一代Chrome Canary :)了.

我在我的服务器上安装了Nginx以及PHP-FPM,在制作新网站并尝试确保尽可能快地使用Google Chrome的审核工具时.在一些错误中,它给了我这个.

Leverage proxy caching (10)
The following publicly cacheable resources contain a Set-Cookie
header. This security vulnerability can cause cookies to be shared
by multiple users.

所以我想知道的是,为了不为此域设置Set-Cookie标头,我必须添加到以下语句中.然后,我将获取该信息并将其应用于css,img,ect子域,以便浏览器可以正确缓存它.

server {
    gzip on;
    gzip_static on;

    listen          80;
    server_name     img.domain.tld;
    root            /www/domain/tld;
    index           index.PHP index.htm index.html;

    location ~* \.(gif|png|jpg|jpeg|svg)${
        expires 30d;
    }

    include PHP_fpm;
}

请在Grumpy之前跟进请求获取更多信息.

这是我用于PHP FPM的配置文件,用于img子域.

PHP-FPM包括

location ~ \.PHP${
    fastcgi_pass    unix:/tmp/PHP.socket;
    fastcgi_param   SCRIPT_FILENAME
                    $document_root$fastcgi_script_name;
    include         fastcgi_params;
}

如您所见,它应该仅在位置以PHP文件扩展名结束时激活.

有趣的是,我还有一个css文件被报告为具有set-cookie标头,并且由css子域服务,其中没有包含PHP-fpm …这里是该部分的配置文件.

server {
    gzip_static on;

    listen          80;
    server_name     css.domain.tld;
    root            /www/domain/css;
    index           index.htm index.html;

    location ~* \.(css)${
        expires 7d;
    }
}

文件是……

Leverage proxy caching (5)
    The following publicly cacheable resources contain a Set-Cookie 
    header. This security vulnerability can cause cookies to be shared
    by multiple users.

> style.css(由css.domain.tld提供)
> 2009EMSWeeklogoSmall.jpg(由domain.tld提供)
> EMS FOUR.jpg(由domain.tld提供)
> get_adobe_reader.png(由img.domain.tld提供)
> dhs-ntas-badge-small.jpg(由dhs.gov提供)

domain.tld服务器配置如下所示.

server {
    gzip on;
    gzip_static on;

    listen          80;
    server_name     .domain.tld;
    root            /www/domain/www;
    index           index.PHP index.htm index.html;

    location ~* \.(htm|html|ico|icns|hqx|gif|png|svg|jpg|jpeg|svg)${
        expires 1d;
    }

    include PHP_fpm;
}

解决方法@H_502_40@
标识要缓存的资源是非默认行为.因此,Chrome导致此通知的任何内容都是您指定要缓存的对象.

缓存指令(在本例中为public)可以通过两种方式设置.

>你的Nginx告诉它缓存.
> PHP告诉它缓存,然后由Nginx转发.

根据你的上面的Nginx配置,并忽略整个include PHP_fpm;,除非你的图像(gif,jpg,png)以某种方式被执行,否则没有什么会建议#1.

PHP也有可能有这样的缓存指令.在这种情况下,这是你应该从核心修复而不是尝试修补工作的东西.

但是在这两种情况下,您还可以输入一个奇怪的场景.如果找不到您的图像,它将尝试查找404页面.如果404是直接或间接的可执行文件(PHP),那么它可以携带一个set cookie命令.如果404指令也告诉它被缓存,这将是一个不好的行为.所以,一定要检查一下.同样也明显适用于任何其他错误代码.

鉴于目前的信息,这是我所能猜到的.如果发现任何错误以及Nginx和/或PHP-fpm的完整配置,您可能需要跟进有关哪个确切项目导致Chrome提供此类消息的其他信息.

我试着查看完整的HTTP标头,看看是否有任何cookie的迹象或传递的任何自定义信息.

来自OP网站的示例响应标头导致警告.

telnet img.nassauems.net 80
Trying 205.186.162.66...
Connected to img.nassauems.net.
Escape character is '^]'.
GET http://img.nassauems.net/buttons/get_adobe_reader.png HTTP/1.1
Host: img.nassauems.net

HTTP/1.1 200 OK
Server: Nginx/1.2.4
Date: Sat,12 Jan 2013 20:24:19 GMT
Content-Type: image/png
Content-Length: 2597
Last-Modified: Fri,28 Dec 2012 08:30:57 GMT
Connection: keep-alive
Expires: Mon,11 Feb 2013 20:24:19 GMT
Cache-Control: max-age=2592000
Accept-Ranges: bytes

来自我的网站的示例响应标头,不会引起警告.

telnet www.mysite.com 80
Trying 123.123.123.123...
Connected to www.mysite.com.
Escape character is '^]'.
GET http://www.mysite.com/test.png HTTP/1.1
Host: www.mysite.com

HTTP/1.1 200 OK
Server: Nginx/1.0.12
Date: Sat,12 Jan 2013 20:21:43 GMT
Content-Type: image/png
Content-Length: 207
Last-Modified: Sat,27 Aug 2011 04:42:30 GMT
Connection: keep-alive
Expires: Sun,13 Jan 2013 20:21:43 GMT
Cache-Control: max-age=86400
Accept-Ranges: bytes

您看得出来差别吗?我不能!

我将此标记为Chrome Audit的错误.

原文链接:https://www.f2er.com/html/228931.html

猜你在找的HTML相关文章