我正在观看来自http://www.reddit.com的有趣的服务器类型,curl -I http://www.reddit.com当我猜测它curl -X HEAD http://www.reddit.com会做同样的事情时。但事实上,并非如此。
我很好奇为什么。
这是我在运行两个命令时观察到的:
curl -I:按预期工作,输出标题并存在。
curl -X HEAD: 不显示任何内容,似乎在等待用户输入。
但是,嗅探tshark我看到第二个命令实际上发送了相同的 HTML 查询并收到了正确的答案,但它没有显示它,也没有关闭连接。
curl -I
0.000000 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=47267342 TSER=0 WS=6
0.045392 213.248.111.106 -> 333.33.33.33 TCP http > 59675 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=2552532839 TSER=47267342 WS=1
0.045441 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=47267353 TSER=2552532839
0.045623 333.33.33.33 …Run Code Online (Sandbox Code Playgroud) 我想在 Linux 机器中查看从 Apache(侦听端口 80)到 Tomcat(端口 4080)发送的 HTTP 标头。
根据维基百科,
标头字段是明文字符串格式的冒号分隔的名称-值对。
我尝试了以下tcpdump命令的一些变体:
$ sudo tcpdump -lnX dst port 4080 -c 10
11:29:28.605894 IP SOME_IP.33273 > SOME_IP.4080: P 0:49(49) ack 1 win 23 <nop,nop,timestamp 1191760962 509391143>
0x0000: 4500 0065 3a9f 4000 3f06 0084 628a 9ec4 E..e:.@.?...b...
0x0010: 628a 9c97 81f9 0ff0 9e87 eee0 144b 90e1 b............K..
0x0020: 8018 0017 fb43 0000 0101 080a 4708 d442 .....C......G..B
0x0030: 1e5c b127 4845 4144 202f 6461 7070 6572 .\.'HEAD./dapper
0x0040: …Run Code Online (Sandbox Code Playgroud) HTTP标头的维基百科描述X-Forwarded-For是:
X-Forwarded-For:client1、proxy1、proxy2、...
该指令的 nginx 文档real_ip_header部分内容如下:
该指令设置用于传输替换 IP 地址的标头的名称。
在 X-Forwarded-For 的情况下,此模块使用X-Forwarded-For 标头中的最后一个ip 进行替换。[强调我的]
这两种描述似乎相互矛盾。在我们的场景中,X-Forwarded-For标头与所描述的完全一样——客户端的“真实”IP 地址是最左边的条目。同样,nginx 的行为是使用最右边的值——很明显,它只是我们的代理服务器之一。
我的理解X-Real-IP是它应该用于确定实际的客户端 IP 地址——而不是代理。我是否遗漏了什么,或者这是 nginx 中的错误?
而且,除此之外,是否有人对如何使X-Real-IP标题显示最左边的值有任何建议,如 的定义所示X-Forwarded-For?
我有几台 IIS/6.0 服务器,安全部门要求我删除一些根据请求发送到客户端浏览器的响应标头。他们担心通过响应头泄露平台信息。我已从网站的 IIS 配置(X-Powered-By 或某些此类标头)中删除了所有 HTTP-HEADERS。
(我个人确实知道这些信息很容易被发现,即使它是隐藏的,但这不是我的要求。)
我想删除的标题:
我也知道 ASP.NET MVC 也发出自己的标头,如果您也知道如何删除它,那会很有帮助。
是否有 shell 命令可以查看 HTTP 请求的标头?
例如,我想知道从中检索的标头www.example.com/test.php是什么
我怎样才能做到这一点?
我正在加载带有 500 内部服务器错误的页面,因为我相信 Apache 尚未配置为允许的指令。
我将 AllowOverride 设置为 all,以及一个 .htaccess 文件,包括:
<FilesMatch "\.(eot|ico|pdf|flv|jpg|jpeg|png|gif|svg|swf|ttf|woff)$">
Header set Cache-Control "max-age=31536000, public"
Header set Expires "Wed, 23 Apr 2014 17:00:01 UTC"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
/var/log/apache2/error.log 有:
[Sat Jul 20 15:12:36 2013] [alert] [client 24.15.83.241] /home/jonathan/.htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
Run Code Online (Sandbox Code Playgroud)
我需要指定什么才能让 Apache2 正确处理“Header”指令?
我目前正在尝试让 nginx 在发送某种 50* 错误时向响应添加标头。我已经在 http 块上有一个 add_header 指令,除了它似乎是错误之外,所有请求都会得到尊重。我还在其中一个 vhost 中尝试了以下操作:
location /mediocregopheristhecoolest {
add_header X-Test "blahblahblah";
return 502;
}
Run Code Online (Sandbox Code Playgroud)
转到该页面会给我一个 502,但没有标题。这只是 nginx 不做的事情,还是我做错了?
是否可以通过 apache 转储整个 HTTP 请求?我需要跟踪传入请求的所有 HTTP 标头。怎么做?
我已将这些规则添加到mime.types:
application/x-font-ttf ttf;
font/opentype otf;
application/vnd.ms-fontobject eot;
font/x-woff woff;
Run Code Online (Sandbox Code Playgroud)
现在,每一个都正确设置了 Content-Type 标头。我现在唯一的问题是 Firefox 需要 Access-Control-Allow-Origin。我用谷歌搜索了这个答案并将其添加到我的服务器指令中:
location ~* \.(eot|ttf|woff)$ {
add_header Access-Control-Allow-Origin *;
}
Run Code Online (Sandbox Code Playgroud)
但现在我的字体根本没有提供。
相反,error.log报告说它试图在本地文件系统上打开它们..
2010/10/02 22:20:21 [error] 1641#0: *15 open() "/usr/local/nginx/html/fonts/mgopenmodernabold-webfont.woff" 失败 (2: 没有那个文件或目录) ,客户端:69.164.216.142,服务器:static.arounds.org,请求:“HEAD /fonts/mgopenmodernabold-webfont.woff HTTP/1.1”,主机:“static.arounds.org”
任何想法可能与语法有关?我是否需要明确添加一条规则,说不要尝试在本地打开它或什么?
编辑:我认为问题是我现在服务于 2 个不同的地点。而不是我应该在主要的内部进行正则表达式检查,然后提供标题。