HTTP Headers 傻瓜教程[译](7)

来源:我想网 时间:2010-01-25 12:48:00 

Etag

这是另一个为缓存而产生的头部信息。它看起来会是这样:

Etag: "pub1259380237;gz"

服务器可能会将该信息和每个被发送文件一起响应给浏览器。该值可以包含文档的最后修改日期,文件大小或者文件校验和。浏览会把它和所接收到的文档一起缓存。下一次当浏览器再次请求同一文件时将会发送如下的HTTP请求:

If-None-Match: "pub1259380237;gz"

如果所请求的文档Etag值和它一致,服务器将会发送304状态码,而不是2oo。并且不返回内容。浏览器此时就会从缓存加载该文件。

Last-Modified

顾名思义,这个头部信息用GMT格式表明了文档的最后修改时间:

Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT

$modify_time = filemtime($file);
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");

它提供了另一种缓存机制。浏览器可能会发送这样的请求:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

在If-Modified-Since一节我们已经讨论过了。

Location

这个头部是用来重定向的。如果响应代码为 301 或者 302 ,服务器就必须发送该头部。例如,当你访问 http://www.nettuts.com 时浏览器就会收到如下的响应:

HTTP/1.x 301 Moved Permanently
...
Location: http://net.tutsplus.com/
...

在PHP中你可以通过这种方式对访客重定向:
header('Location: http://net.tutsplus.com/');

默认会发送302状态码,如果你想发送301,就这样写:

header('Location: http://net.tutsplus.com/', true, 301);

Set-Cookie

当一个网站需要设置或者更新你浏览的cookie信息时,它就会使用这样的头部:

Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT

每个cookie会作为单独的一条头部信息。注意,通过js设置cookie将不会体现在HTTP头中。

在PHP中,你可以通过setcookie()函数来设置cookie,PHP会发送合适的HTTP 头。

setcookie("TestCookie", "foobar");

它会发送这样的头信息:

Set-Cookie: TestCookie=foobar

如果未指定到期时间,cookie就会在浏览器关闭后被删除。

WWW-Authenticate

一个网站可能会通过HTTP发送这个头部信息来验证用户。当浏览器看到头部有这个响应时就会打开一个弹出窗。

WWW-Authenticate: Basic realm="Restricted Area"

它会看起来像这样:

在PHP手册的一章中就有一段简单的代码演示了如果用PHP做这样的事情:

if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

Content-Encoding

这个头部通常会在返回内容被压缩时设置。

Content-Encoding: gzip

在PHP中,如果你调用了ob_gzhandler()函数,这个头部将会自动被设置。

英文原文来源

标签:http,headers,教程
0
投稿

猜你喜欢

  • 彻底弄懂CSS盒子模式之四(绝对定位和相对定位)

    2007-05-11 16:51:00
  • SQL提高查询效率之Like篇

    2011-10-01 09:36:42
  • Python做屏幕录制工具的实现示例

    2021-06-17 09:29:23
  • SQL 查询性能优化 解决书签查找

    2024-01-28 08:33:53
  • 使用Kubernetes集群环境部署MySQL数据库的实战记录

    2024-01-14 15:30:16
  • Python实现线性插值和三次样条插值的示例代码

    2023-12-04 19:19:42
  • Python爬虫实战之爬取京东商品数据并实实现数据可视化

    2023-11-02 18:42:38
  • python线程池threadpool实现篇

    2022-03-21 19:37:34
  • scala中停止循环的三种方式(推荐)

    2023-03-20 07:03:34
  • 浅谈pandas用groupby后对层级索引levels的处理方法

    2022-10-15 01:43:37
  • python函数返回多个值的示例方法

    2023-04-14 10:38:05
  • js实现无需数据库的县级以上联动行政区域下拉控件

    2024-01-17 01:05:53
  • 简单讲解Python中的字符串与字符串的输入输出

    2021-09-14 18:57:08
  • JS+CSS模拟可以无刷新显示内容的留言板实例

    2024-04-19 10:17:13
  • python PyTorch预训练示例

    2022-07-06 18:24:02
  • 使用卷积神经网络(CNN)做人脸识别的示例代码

    2023-12-31 06:25:05
  • Python基于二分查找实现求整数平方根的方法

    2023-01-17 01:33:49
  • 剖析Python的Tornado框架中session支持的实现代码

    2022-12-06 17:53:13
  • MySQL8.0内存相关参数总结

    2024-01-26 07:37:26
  • 隐蔽的ASP后门 大家可以查看下

    2010-08-05 21:26:00
  • asp之家 网络编程 m.aspxhome.com