2.2. HTTP基础

HTTP 请求有几个基本方法 HEAD、GET、POST、PUT、DELETE。平时你打开一个网页,比如你的浏览器访问 www.bangzhufu.com 其实浏览器就是发送了一个 GET 方法过去,如果你是登陆操作,一般使用的就是 POST 方法用于把用户名、密码发送过去。GET的特点是参数都在 URL 里面,所以你可以"收藏"这个URL,下次打开还是一样的页面(bzfshop 的 manage 系统大量使用 GET 请求,这样你可以收藏任何页面,或者把这个页面的URL发给你的同事查看)。如果你不希望用户在 URL 里面看到参数,或者你需要提交的数据实在太大(上传一个文件?)那你只能使用 POST 操作,可以这么认为,POST 其实就是一次性操作,所以 POST 的页面无法收藏。

HEAD 操作一般很少自己主动用,主要是浏览器用于查询页面缓存,或者CDN服务器之间用与验证缓存的有效性,或者一些网站监控程序用于监控网站是否还存活。在 Linux 下你可以简单的用 curl 命令来模拟一次 head 操作,如下:

[email protected]:~$ curl --head http://www.bzfshop.net

HTTP/1.1 200 OK
Server: nginx/1.2.9
Date: Mon, 16 Dec 2013 10:45:24 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By-360WZB: wangzhan.360.cn
Vary: Accept-Encoding
Pragma: no-cache
VAR-Cache: EXPIRED

这里返回的头信息(header 信息)对于判断网页的有效性很有价值。具体的含义请自己 Google 或者 Wikipedia 查看,这里不再深入。

bzfshop 实现了 HEAD、GET、POST 方法,具体可以见 Controller 中的 public function get($f3)public function post($f3) 方法,head 的实现在 BaseController 中的 public function head($f3),具体的 Controller 可能根据自己的需要另外实现了自己的 head 方法。

[警告]

bzfshop 设计是可以配合 CDN 一起工作的,所以我们自己会控制所有的 head 操作。如果你对 HTTP 协议不是很了解的话请不要随便修改 head 操作,否则可能会带来不可预测的结果。