标签: http-headers

http 请求的 gzip 不正确,找不到是谁在做的

我们看到了一些非常奇怪的 HTTP 响应修改,我们无法弄清楚这是怎么回事。我们有一个处理 JSON 请求的应用服务器。有时,响应以 gzip 格式返回,但包含不正确的标头,导致浏览器无法正确解释它。

这个问题是间歇性的,随着时间的推移会改变行为。昨天早上它似乎有 50% 的时间失败,事实上,它似乎与我们的两台负载平衡服务器之一有关。下午晚些时候,它在 1000 次中只有 20 次失败,并且与应用服务器无关。

这两个应用程序服务器运行 Apache 2.2,带有 mod_wsgi 和一个 Django 应用程序堆栈。它们具有相同的 Apache 配置和源代码树,甚至在 Red Hat 上安装了相同的软件包。前面有一个硬件负载均衡器,我不知道品牌或型号。

Akamai 也是食物链的一部分,尽管我们移除了 Akamai,但问题仍然存在。

这是一个很好的请求和响应:

* Connected to example.com (97.7.79.129) port 80 (#0)
> POST /claim/ HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
> Host: example.com
> Accept: */*
> Referer: http://example.com/apps/
> Accept-Encoding: gzip,deflate
> Content-Length: 29
> Content-Type: application/x-www-form-urlencoded
> 
} [data not shown]
< HTTP/1.1 200 OK
< Server: Apache/2 …
Run Code Online (Sandbox Code Playgroud)

http gzip http-headers apache-2.2

5
推荐指数
1
解决办法
2183
查看次数

浏览器缓存是否需要 Last-Modified HTTP 标头?

当我取消设置Last-Modified在Apache的头(ETags也被禁止),火狐(4.01),将不缓存任何文件,无论我是否设定一个未来的Expires页眉或启用Cache-Control头。

那么浏览器缓存需要Last-Modified(和/或ETag)标头吗?

这里

如果响应中没有验证器(ETag 或 Last-Modified 标头),并且它没有任何明确的新鲜度信息,它将被视为不可缓存。

...好吧,如果“新鲜度信息”是指“Cache-Control”或“Expires”标头,那么 Firefox 应该在没有 Last-Modified 标头的情况下进行缓存。

编辑更多 Firefox 信息

请注意,在 Firefox 4.01 中由 Apache 2.2 提供的任何 PHP 文件上生成 304 的任何尝试都不会成功(重新加载、重新访问等)而没有Last-Modified标头,无论设置了有效缓存Cache-Control标头、Expires标头或两者的任何组合标题。

foo.php:这个文件的内容只是简单地回应“Hello World”。

HTTP/1.1 200 OK
Date: Mon, 06 Jun 2011 14:04:58 GMT
Server: Apache
Cache-Control: public, max-age=3600
Expires: Fri, 01 Jul 2011 21:23:55 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1594
Keep-Alive: …
Run Code Online (Sandbox Code Playgroud)

http-headers

5
推荐指数
1
解决办法
5785
查看次数

如何使用适配后的标头记录 Squid 发出的有效传出 HTTP 请求?

我使用 Squid 来修改客户端发送的一些 HTTP 标头。出于测试目的,我想完全删除“User-Agent”标头。

这是我的配置:

request_header_access User-Agent deny all
header_replace User-Agent Timmy
logformat mylogformat %>a [%{%H:%M}tl] "%rm %ru HTTP/%rv" %>Hs "Accept:%{Accept}>ha User-Agent:%{User-Agent}>ha" {%Ss:%Sh}
Run Code Online (Sandbox Code Playgroud)

我使用语法 '>ha' 来记录“适配和重定向后的 HTTP 请求标头”,正如这里所说的http://www.squid-cache.org/Versions/v3/3.1/cfgman/logformat.html

不幸的是,根据我的日志文件 access.log,标题没有被修改:

x.x.x.x [19:18] "GET http://example.org/favicon.ico HTTP/1.1" 404 "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2" {TCP_MISS:DIRECT}` 
Run Code Online (Sandbox Code Playgroud)

但是,当通过代理向我的 Nginx 服务器发出请求时,Nginx 有效地正确记录了此标头:

[06/Mar/2012:19:18:07 +0100] "GET /sites/all/modules/colorbox/styles/default/images/controls.png HTTP/1.1" 200 2104 "http://example.org/sites/default/files/css/css_zpYGaC6A9wUNMpW3IPg55mz-mMAjvhuo-SZTcX-lqFQ.css" "Timmy"
Run Code Online (Sandbox Code Playgroud)

在鱿鱼日志文件上记录正确修改的 HTTP 标头、重写的 url 等的正确语法是什么?

我的鱿鱼版本是 2.7.STABLE9,它在 Debian SQueeze 64 位上运行。

谢谢你的帮助

http squid http-headers

5
推荐指数
1
解决办法
2393
查看次数

使用 Squid 添加 HTTP 请求标头

我想允许我的用户仅为我的域登录 Google 应用程序。我通过添加此 Google 帮助页面中X-GoogApps-Allowed-Domains所述的 HTTP 标头找到了解决方案。

我使用 Squid,但不知道如何配置 Squid 来执行此操作。如何使用 Squid 添加此请求标头?

google squid http-headers application

5
推荐指数
2
解决办法
2万
查看次数

如何使用php-fastcgi删除nginx中的“Client-Peer”(等)标头

我的设置:

  • 操作系统:Ubuntu 11.04
  • HTTP 服务器:nginx 1.2.1
  • (其他不相关的软件 - ruby​​、python 等)

我的问题:

我正在尝试完全屏蔽为页面提供服务的软件(部分是安全性,主要是因为它很有趣),我设法更改了服务器名称并删除了X-Powered-Byphp-fastcgi 添加的标题,但是我无法删除三个标题:

Client-Date: Thu, 14 Jun 2012 20:32:34 GMT
Client-Peer: 205.186.146.37:80
Client-Response-Num: 1
Run Code Online (Sandbox Code Playgroud)

我已经more_clear_headers从 HttpHeadersMore 模块中使用过,但是尽管能够删除X-Powered-By标题,但没有任何效果。

这是在我的http街区

more_set_headers "Server: Tesco Value";
more_clear_headers "X-Powered-By";
more_clear_headers "Client-*";
more_clear_headers "Client-Date";
more_clear_headers "Client-Response-Num";
more_clear_headers "Client-Peer";
more_clear_headers "X-Pingback";

add_header X-Required-Volume-Setting 11;
add_header X-Required-Speed 88mph;

# NEW: added in thanks to the answer from @kworr - but still doesn't work …
Run Code Online (Sandbox Code Playgroud)

nginx http-headers

5
推荐指数
1
解决办法
3444
查看次数

我的网络服务器是否允许预取?

我有一个基于图像的网站,其中包含多个画廊。当用户单击其中一个图像时views,特定图像的属性会增加。但是,我注意到在使用 Firefox (14.0.0.1) 时它会增加两次视图,而不那么复杂的浏览器(例如 K-meleon)会增加一次属性 - 应该如此。

然后有人在 stackoverflow 上指出,这可能是由于现代浏览器中的预取导致 PHP 脚本从数据库中获取图像并增加要执行两次的视图。因此,检查我的 apache access.log 我注意到 Firefox 确实请求每个图像两次:

Firefox/14.0.1" ::1 - - [03/Aug/2012:16:41:37 +0100] "GET /imgsite/getImg.php?id=23 HTTP/1.1" 200 57362 " http://localhost /imgsite/index.php " "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" ::1 - - [03/Aug/2012:16:41:37 +0100] " GET /imgsite/getImg.php?id=23 HTTP/1.1" 200 57362 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"

然后我阅读了 .htaccess 并尝试了几种阻止 Firefox(或 chrome)发送的预取标头的方法,但这些标头不应该出现在上面的代码段中吗?到目前为止,一切都没有奏效。这是我的 .htaccess 文件,它位于我网站的根 HTML 路径中:

RewriteEngine On
RewriteCond %{HTTP:X-moz} prefetch
RewriteRule . . [F,L]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上述其他更广泛的变体,但仍然无济于事。我的 apache …

php .htaccess http-headers

5
推荐指数
1
解决办法
671
查看次数

nginx:在重写的位置块中指定自定义标头

我正在尝试仅为locationnginx 中的特定块设置一些标头。

我遇到的问题是这些location块包含rewrite语句,显然似乎删除了自定义标题。

在这个例子中,我有两个我想要的规则:

  • 里面的文件/static应该有expires max;(它设置标题Cache-Control: max-age=some huge valueExpires: some future date really far off),并将它们的名字重写为不包含的内容/static
  • 其他地方的文件都应该有Cache-Control: public(没有max-age

这是我尝试的配置:

server {
    listen [::]:80;
    root /somepath;
    location /static {
        expires max;
        rewrite /static(.*) /whatever$1;
    }
    add_header Cache-Control public;
}
Run Code Online (Sandbox Code Playgroud)

并具有以下目录结构:

/somepath
/somepath/f1.txt
/somepath/static/f2.txt
Run Code Online (Sandbox Code Playgroud)

然后我们得到以下信息:

  • f1.txt: Cache-Control: public, 没有Expires标题
  • f2.txt: Cache-Control: public, 没有Expires标题

这对f1.txt但无效 …

http configuration nginx cache http-headers

5
推荐指数
1
解决办法
5946
查看次数

nginx 正在切割动态页面的末尾并缓存它们

我将我的一个旧站点从 Apache 移到了 nginx 服务器。一切正常,但该站点有一些长内容(+100k 生成的 HTML 文件)。

我的第一次尝试是禁用分块传输编码,但这并没有帮助。

这是我的 nginx 配置:

$ cat /etc/nginx/nginx.conf
user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;

    sendfile        on;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_static on;
    gzip_http_version   1.0;
    gzip_disable        "MSIE [1-6]\.";
    gzip_vary           on;
    gzip_comp_level 1;
    gzip_proxied    any;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_buffers    16 8k;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

$ cat /etc/nginx/sites-enabled/example.com
server {
    listen   443 ssl; …
Run Code Online (Sandbox Code Playgroud)

http nginx http-headers

5
推荐指数
1
解决办法
4815
查看次数

如何在负载均衡器后面使用 SSL 并仍然获得客户端 IP?

请注意,由于网络安全相关问题,我无法在负载平衡器上使用 SSL 终止。

我得到的客户端 IP 当然是负载均衡器的 IP。我知道负载平衡器在没有我的密钥的情况下无法修改 HTTPS 消息,但是在使用 SSL 进行负载平衡时是否有另一种方法来获取客户端 IP 地址,例如可能只是在 TCP 级别进行负载平衡,或者其他什么?

ssl load-balancing http-headers

5
推荐指数
1
解决办法
6108
查看次数

只允许对目录中的特定文件使用 POST 方法

我有一个只能通过 POST 方法访问的文件。

/var/www/folder/index.php
Run Code Online (Sandbox Code Playgroud)

文档根是/var/www/index.php嵌套在文件夹内。

Apache 的版本是:2.4.4。
我的配置如下:

<Directory "/var/www/folder">
    <Files "index.php">
        order deny,allow
        Allow from all
        <LimitExcept POST>
            Deny from all
        </LimitExcept>
    </Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

我访问我的服务器,127.0.0.1/folder但我可以像往常一样获取和发布文件。

我也试过颠倒顺序order allow,deny、、要求、限制除外和限制。

如何只允许一个文件夹中的一个文件处理 POST 请求?

httpd.conf http-headers apache-2.2

5
推荐指数
1
解决办法
2万
查看次数