Articles of http headers

Apache为某些MP3返回206

我们正在尝试从web1.cowbird.com提供MP3文件。 大多数情况下,一切正常。 但是,有时候有一个浏览器无法播放的文件,我不知道为什么。 这是一个例子: http : //web1.cowbird.com/items/stories/2012/11/04/05/18/47222/1_5095f977b4f532.99916135-original.mp3 如果你wget或curl的文件,它工作正常。 但是试图在Chrome或Firefox中使用它会导致出现一些奇怪的错误,因为某些原因,浏览器没有下载整个文件,因此无法播放它。 出于某种原因,浏览器似乎在第一个请求中获得200结果,然后使用Range:bytes = 0-头创build另一个请求。 响应标题看起来是正确的,但没有足够的字节正在传输。 我一直在寻找所有试图了解是否它与字节范围请求,并尝试了各种Apache设置没有运气。 很乐意提供任何额外的信息。 谢谢!

用nginx有条件地提供高分辨率和WebP图像

不知道如果我试图拉下不可能的,但我想要configurationNginx服务“.webp”文件到浏览器支持文件格式和服务回退文件(即PNG,JPG等)到浏览器那还不支持WebP格式。 我也希望Nginx能够在检查视网膜支持和服务这些照片的原始或@ 2x大小的版本时做到这一切。 /assets/img/目录中称为“sample-photo”的图片的示例stream程: 检查浏览器是否支持WebP,如果是高分辨率设备,请input:“assets / img / [email protected]” 设备可能不是高分辨率,因此可以提供:“assets / img / sample-photo.webp” 也许WebP不被支持,但设备是高分辨率,所以服务:“assets / img / [email protected]” 浏览器不支持WebP和设备不是高分辨率,服务:“assets / img / sample-photo.png” 我自己刺了一下,但没有太多的运气。 我发现了两个令人敬畏的post,帮助我开始了正确的方向。 下面是我的代码。 真的很感激任何见解和帮助。 我的第一个想法是,也许在最后的try_files声明中有一些不可思议的事情发生。 非常感谢! 有条件地提供高分辨率的图像 用nginx有条件地处理文件 此代码位于我的文档的HTML头部。 检查高分辨率支持并设置一个cookie: <!– Set the 'device-pixel-ratio' cookie with Javascript if hi-res is supported –> <script type="text/javascript"> if (!document.cookie.match(/\bdevice-pixel-ratio=/)) { document.cookie = 'device-pixel-ratio=' + […]

Nginx – 允许没有主机头的请求

当Nginx收到一个缺lessHost头部的请求时,它会以400的响应拒绝它。 正如它应该。 有没有办法解决? 有一个硬件需要能够对我的Nginxnetworking服务器进行REST调用,但是这个设备没有发送一个主机头。 我无能为力,我无法控制这个装置的内部运作。 这将是唯一的设备与我的networking服务器通信,缺乏一个主机头,并将始终连接到相同的位置。 服务器正在使用基于名称的虚拟主机。 我已经尝试使用headers-more-nginx模块重build我的服务器,因为我相信它可以在处理之前将请求头添加到请求中。 我将下面一行添加到此虚拟主机的服务器块: more_set_input_headers "Host: device.myserver.com"; 但是请求仍然被400拒绝。 编辑: 我忘了提及这些设备目前能够向lighttpd 1.4.28 Web服务器发出请求。 我试图让他们在Nginx上工作。 我在lighttpdconfiguration文件里找不到任何特别的东西,应该让这个工作起作用,好像lighttpd就不需要这个头文件。 编辑2: 来自tcpdump的结果(我把我不应该放在网上的东西写出来): POST http://XXX.XXX.XXX.com/index/get-next-command HTTP/1.1 Content-Type: application/x-www-form-urlencoded Connection: keep-alive Content-Length: 62 user=XXX&pass=XXX&v=0103HTTP/1.1 200 OK X-Powered-By: PHP/5.3.10-1ubuntu3.21 Set-Cookie: PHPSESSID=XXX; path=/ Set-Cookie: username=XXX; path=/ Set-Cookie: password=XXX; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, […]

如何防止HAProxy删除带有下划线的HTTP标头

我们有一个API后端服务器,需要某些包含下划线的HTTP头。 我知道,这不是最好的做法,标题应该使用连字符,但我不能改变这一点。 我们使用nginx作为代理服务器,并使用underscores_in_headers on选项。 这会导致nginx不删除这些头文件。 现在我们要切换到HAProxy,并在configuration更改之前将其作为nginx使用下划线删除标题。 有没有办法阻止HAProxy下拉字头?

NGINX直通式服务器头

如何让NGINX通过上游服务器的“服务器”标题? 就像,如果NGINX代理服务器头部'Apache2.2(CentOS)'的Apache服务器,它将它取出并用'NGINX / 1.0.1'代替它。 我们在我们的Server:头中有我们的机器ID,所以我们需要让NGINX停止覆盖它们。

IIScaching控制标题设置

我目前正在通过https访问的网站上工作。 我们最近遇到了一个问题,我们无法查看.pdf文件或作为附件发送的任何其他types的文件( Content-Disposition:attachment )。 根据Microsoft知识库,这是由于Cache-Control设置为no-cache 。 但是,我们要求所有页面在每次访问时都要重新加载,所以我们禁用了所有页面的caching(通过我们的ASP代码,而不是通过IIS设置)。 不过,我已经做了一个显示附件的特殊情况,现在它返回一个带有Cache-Control:private的标题,将来的期限设置为1分钟。 这个工作正常,当我在我的本地机器上使用httpstesting它。 但是,当我将其部署到我们的testing服务器并尝试使用时,响应头仍然会返回Cache-Control:no-cache 。 我和服务器之间没有防火墙或任何东西,所以IIS本身必须添加这些标题并replace我的。 我不知道为什么它会这样做,它没有任何意义,但它似乎是目前唯一的select(我还没有find任何其他地方的代码,将改变caching头)。 任何人都可以指向一个可能的地方,IIS可能会设置这些头值? 编辑:事实certificate,IIS 没有搞乱我的caching设置。 相反,我发布的文件夹与IIS提供的文件夹不同。 当我检查path时,我发现了这一点,当我注意到IIS服务的文件太老了。 在正确的文件夹指向IIS修复了我所有的问题。

要求更好地解释过期标题

然而,我已经成功实施了expires头文件,好几天我都被一件事情搞砸了。 这篇文章: http : //www.tipsandtricks-hq.com/how-to-add-far-future-expires-headers-to-your-wordpress-site-1533 states 请记住,当你使用expires头时,文件被caching在浏览器中,直到它过期,所以不要在经常改变的文件上使用它。 其他网站在我的阅读中也一样。 但是这似乎并不真实。 我更新了一个图像,使用相同的名称,几次。 每次更新和刷新我的浏览器时,都会显示新的图像(具有相同的名称)。 我从这篇文章中明白,除非我使用新的名字,否则应该显示旧的图像。 你碰巧知道误会在哪里? 我已经validation,有问题的图像已过期设置在其上的标题: 请求标题: Host domain.com User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 FirePHP/0.5 Accept image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Referer http://domain.com/index.php Cookie __utma=1.61479883.1332439113.1332783348.1332796726.4; __utmz=1.1332439113.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);PHPSESSID=lv2hun9klt2nhrdkdbqt8abug7; __utmb=1.33.10.1332796726; __utmc=1; ck_authorized=true x-insight activate If-Modified-Since Mon, […]

server_tokensclosures,但仍然发布它们

我补充说 server_tokens off; 到/etc/nginx/nginx.conf文件的http {}部分,并重新启动nginx service nginx restart 命令。 但服务器仍然在响应请求时发布服务器令牌。 我也检查了网站启用/可用的configuration文件,如果有任何server_tokens,但没有没有。

为什么此HTTP头configuration会导致浏览器始终执行If-Modified-Since请求?

在我们的服务器上,我们已经configuration了http响应头,如下所示: Cache-Control:max-age=28800, must-revalidate # (8 hours) Connection:Keep-Alive Date:Wed, 24 Apr 2013 21:36:19 GMT ETag:W/"173520-1366833451000" Expires:Thu, 25 Apr 2013 05:36:19 GMT # (8 hours from access) Keep-Alive:timeout=15, max=484 Server:Apache-Coyote/1.1 Vary:Accept-Encoding,User-Agent 我们的意图是资源被浏览器caching8个小时,然后浏览器在使用caching副本之前应该检查它是否被修改过(有304请求)。 不过,我发现浏览器总是做一个304 。 (它继续使用它的caching副本,但在此之前检查服务器是否有修改 – 我想在8小时后发生,而不是所有的时间。 正如我认为它应该工作, Cache-Control:max-age=28800, must-revalidate应该指示客户端使用caching的资源,直到它在caching中达到max-age ,之后它must-revalidate与原始服务器must-revalidate 。 我相信Expires指令更像是一个后备,而Cache-Control取代了 – 但是如果它在起作用,我希望浏览器在到期date之前使用caching副本,然后获取新的副本。 大部分是从这篇文章中收集的,仔细阅读规范。 显然,我的理解是不完整的 – 我错过了什么? 编辑:我错误地认为通过刷新当前页面,我将testing当浏览器转到具有相同资源链接的后续页面时会发生什么。 我错了 – 点击“刷新”button通常似乎强制浏览器检查在使用caching副本之前是否有任何资源已被修改, 这非常明显 。 当我点击到其他页面时,资源就像预期的那样直接从caching中取出。

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

请注意,由于networking安全相关的问题,我无法在负载平衡器上使用SSL终止。 我得到的客户端IP当然是负载平衡器。 我知道负载均衡器不能修改HTTPS消息,而不需要我的密钥,但是有什么方法可以在使用SSL进行负载平衡时获得客户端IP地址,比如可能只是在TCP层进行负载平衡,或者什么?