http protocol (by hanlray(at)gmail.com)
base
以Request-Response方式工作,因此有两种messsage:request messsage和response message。每个message由三个部分组成:- 一个start line,描述message
- headers,是一些attributes,必须以空行(CRLF)结束,即使没有headers和下面的body
- body,负载的数据
request message和response message的差别仅在start line上:
-
request message
- <method> <request-URL> <version> response message
-
<version> <status> <reason-phase>
在request message的start line里,method字段告诉server应该执行的动作,request-URL则指明在哪个resource上执行该动作,主要的method有:
- GET 从server端取回指定的resource,没有body
- PUT 存储body里的数据到server端指定的resource
- POST 发送body里的数据给server端指定的resource处理
GET method的request message是没有body的,如果需要发送数据可以选择把它们编码到URL里,不过对于比较敏感的数据不推荐这样做,因为许多server、proxy和user agent会把request-URI存在某个地方,这样这些数据就可能被暴露给第三方。
cookie
http协议是无状态的,因此server端是无法识别用户的(用IP address显然不是一个好办法),这样就无法实现用户特定的应用(如购物车等)。当用户第一次访问一个使用cookie的站点,或者向该站点提交用户名/口令通过验证后,该站点为该用户产生一个唯一的ID(任意形式的字符串)来标识该用户并把该值作为http header set-cookie的值送回browser,支持cookie的browser发现是set-cookie的消息就把该站点的domain name和这个cookie值作为一项存入browser的cookie数据库中(可能是一个文件),自此以后向站点发送的http request的headers里都会包括cookie attribute,其值就是保存的cookie值,server端根据收到的这个cookie值就能识别用户,根据不同用户来作相应的响应了。
cookie是有生命期的,短的当退出浏览器就失效,长的则永不过期。