我在X-Forwarded-*标题上找到了一些有趣的读物,包括Apache文档中的 反向代理请求标题部分,以及关于X-Forwarded-For的维基百科文章.
我明白那个:
X-Forwarded-For 给出连接到代理的客户端的地址X-Forwarded-Port给客户端上连接的客户端端口(例如80或443)X-Forwarded-Proto给出客户端用于连接代理(http或https)的协议X-Forwarded-Host给出Host客户端发送给代理的头的内容.这些都是有道理的.
但是,我仍然无法弄清楚一个真实的用例X-Forwarded-Host.我理解需要在不同的端口上重复连接或使用不同的方案,但为什么代理服务器Host在重复请求到目标服务器时会更改标头?
我使用 Nginx 作为反向代理。
这些标头有什么区别:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Run Code Online (Sandbox Code Playgroud)
在一些文档/教程中,我看到两者都被使用,而在其他文档/教程中,只有第一个。
它们看起来很相似,所以我想了解它们有何不同以及我是否需要同时使用两者。
我想在我的客户端JavaScript中捕获HTTP请求头字段,主要是Referer和User-Agent.我怎么能访问它们?
Google Analytics(分析)设法通过JavaScript将您嵌入页面中的数据获取,因此它绝对可行.
我编写了一个PHP脚本来处理文件下载,确定正在请求的文件,并设置正确的HTTP头以触发浏览器实际下载文件(而不是在浏览器中显示).
我现在遇到一个问题,其中一些用户报告某些文件被错误识别(因此无论扩展名如何,浏览器都会将其视为GIF图像).我猜这是因为我没有在响应头中设置"Content-type".这种情况最有可能发生吗?如果是这样,是否有一个可以用于所有文件的相当通用的类型,而不是试图考虑每种可能的文件类型?
目前我只设置值"Content-disposition:attachment; filename = arandomf.ile"
更新:我在此处按照本指南构建了一个更强大的文件下载过程(http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/) ,但是在执行脚本和显示浏览器的下载对话框之间存在明显的延迟.任何人都可以找出造成这种情况的瓶颈吗?
这是我的实现:
/**
* Outputs the specified file to the browser.
*
* @param string $filePath the path to the file to output
* @param string $fileName the name of the file
* @param string $mimeType the type of file
*/
function outputFile($filePath, $fileName, $mimeType = '') {
// Setup
$mimeTypes = array(
'pdf' => 'application/pdf',
'txt' => 'text/plain',
'html' => 'text/html',
'exe' => 'application/octet-stream',
'zip' => 'application/zip',
'doc' => …Run Code Online (Sandbox Code Playgroud) 我有一个PHP脚本,只返回纯文本,没有任何HTML.现在我想对该脚本发出cURL请求,我得到以下响应:
HTTP/1.1 200 OK
Date: Mon, 28 Feb 2011 14:21:51 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.2.12-nmm2
Vary: Accept-Encoding
Content-Length: 6
Content-Type: text/html
6.8320
Run Code Online (Sandbox Code Playgroud)
实际响应只有6.8320作为没有任何HTML的文本.我想通过删除标题信息从上面的响应中检索它.
我已经将脚本缩小了一点:
$url = $_GET['url'];
if ( !$url ) {
// Passed url not specified.
$contents = 'ERROR: url not specified';
$status = array( 'http_code' => 'ERROR' );
} else if ( !preg_match( $valid_url_regex, $url ) ) {
// Passed url doesn't match $valid_url_regex.
$contents = 'ERROR: invalid url';
$status = array( 'http_code' …Run Code Online (Sandbox Code Playgroud) 我知道这听起来很愚蠢.
我正在使用一个只有16MB RAM的嵌入式平台.我需要深度数据包过滤HTTP流.为了防止设备的DoS,我想要一些关于HTTP流大小的统计平均值,特别是HTTP标头.
解析Python中的User-Agent字符串以便可靠地检测的最佳方法是什么
或者也许是任何帮助库
据我所知,HTTP规范允许设置多个具有相同名称的HTTP头.是否有任何用例(从客户端到服务器,反之亦然)?
当且仅当该头字段的整个字段值被定义为以逗号分隔的列表[即,#(值)]时,具有相同字段名的多个消息头字段可以存在于消息中.必须可以将多个头字段组合成一个"字段名:字段 - 值"对,而不改变消息的语义,方法是将每个后续字段值附加到第一个字段值,每个字段值用逗号分隔.因此,接收具有相同字段名称的头字段的顺序对于组合字段值的解释是重要的,因此代理不能在转发消息时改变这些字段值的顺序.
如果我没有错,则不存在需要多个具有相同名称的标头的情况.
是Content-LengthHTTP/1.0响应所需的标头吗?HTTP规范提到它是请求所必需的,但没有提及有关响应的任何内容:
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Content-Length
包含实体主体的所有HTTP/1.0请求消息都需要有效的Content-Length字段值.
如果响应不需要,当客户端大于1MB时,客户端如何读取响应?
我正在提供我的css/javascript文件的gzipped副本.根据教程,我将内容类型设置为application/gzip提供这些文件时的类型.但是,chrome似乎并没有解压缩这些文件,而对于javascript文件,我得到了很多"非法字符"错误.如果我查看源代码,我仍然会将文件视为压缩文件,而不是未压缩文件.
我的问题是,我应该将这些文件的内容类型设置为什么,以便浏览器将它们正确地解释为gzip压缩的css/js文件,并取消gzip它们?如果我只是设置text/javascript或text/css,浏览器仍然会正确解释它们吗?
编辑:完整响应标头:
HTTP/1.1 200 OK
x-amz-id-2: UIBkZT/MuFxsmn+3nVOzEO63rRY99l3traCbMExUgSdGHUrOIPtNp34h1+ujYKmt
x-amz-request-id: 19346C9B01D8FC62
Date: Mon, 12 May 2014 03:59:51 GMT
Content-Encoding: gzip
Last-Modified: Mon, 12 May 2014 02:24:54 GMT
ETag: "561080b5e19f6daea2e74fd5a0623c79"
Accept-Ranges: bytes
Content-Type: application/x-gzip
Content-Length: 5153
Server: AmazonS3
Run Code Online (Sandbox Code Playgroud) http-headers ×10
http ×8
javascript ×2
php ×2
content-type ×1
curl ×1
download ×1
gzip ×1
nginx ×1
proxy ×1
python ×1
user-agent ×1