本人学习HTTP相关知识的总结,力求以最简单和高效的语言说明问题,让你们快速掌握知识点。
本章家主要介绍HTTP协议的基础,重点放在对cookie的讲解。
本人能力有限,若有不正确之处请批评指正。css
HTTP全称Hypertext Transfer Protocol,即超文本传输协议。
它是一种属于应用层的通讯协议,容许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
HTTP字面意义上就是为了HTML的传输而发明的网络协议,但进过不断的完善、改进和发展后,它已经再也不局限于此,好比如今css、js、图片也是经过这个协议传输的。所以HTTP已经成为了Web领域一种通用的传输协议。json
HTTP协议的报文头大致能够分为四类:通用报文头、请求报文头、响应报文头和实体报文头(描述报文体)。
在HTTP/1.1里一共规范了47种报文头字段。
各类报文定义参见:报文列表segmentfault
请求方法使用在请求行中,是客户端告诉服务器该执行什么样的数据操做的标记,但也仅仅只是标记做用,并无严格意义上限制服务器的行为。
可以严格遵循这套标准的服务,好比RESTful架构,有利于语义化并提供客户端必定的自主性,但在非标准实现的服务器上,你甚至能够用一个POST方法涵盖GET、POST、PUT、DELETE操做。浏览器
等幂性:若是一个方法或功能执行一次或者屡次,结果是同样的,那么就说这个方法或功能是等幂的。
例如,设置某个用户的性别为男性,这个方法不管执行一次仍是屡次,它的结果都是相同的。因此,该方法具备幂等性。
例如,某个帐户充值100元,这个方法执行一次和执行屡次的结果是不相同的。因此,该方法不具备幂等性。
用以表示网页服务器超文本传输协议响应状态的3位数字代码。按首字母可分为如下五大类:安全
完整列表请参考:状态码列表服务器
前面讲到HTTP协议的特色时,提到其“无状态”的特性,但实际使用中须要登陆状态的场景是十分广泛的,为了解决这个问题就有了cookie机制。
cookie其实是服务器保存在客户端上的一小段的文本信息。以键值对的形式保存,并由客户端维护其有效期。服务器经过响应报文头set-cookie进行设置。当客户端再次请求该源时,会在请求报文头里将有效的cookie提交给服务器。
cookie遵循同源策略。cookie这种保存并自动回传必定数据的特性,使基于无状态的HTTP协议记录稳定的状态信息成为了可能。cookie
不知道同源策略是啥能够看个人另外一篇文章的第一部分:传送门。网络
set-cookie是响应报文头,形如:session
set-cookie: <key>=<value>; Expires=<date>; Secure; HttpOnly
key为属性名,value为值,一个set-cookie设置一个key,如需设置多个key,只须要同时返回多个set-cookie,例子中Expires、Secure、HttpOnly为可选值。全部可选属性以下:架构
属性名 | 说明文字 |
---|---|
Expires | 超时时间点,默认是session,即关闭浏览器失效。 |
Max-Age | 失效前的秒数。优先级高于expires。 |
Domain | 可使用这个cookie的域,二级域名可指定为一级,一级只能指定为一级。 |
Path | 可使用这个cookie的路径。 |
Secure | 限制该cookie只经过https传递。 |
HttpOnly | 限制该cookie只由服务器读写,不能被js获取到。 |
cookie是请求报文头,形如:
cookie: <key>=<value>; <key>=<value>...
key为属性名,value为值,会一次返回该源下的全部有效key,以分号为分割。这个结果与在浏览器执行document.cookie获取到的值相同。
session是服务器记录客户状态的机制。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。客户端再次访问时只须要从该session中查找该用户的状态。
通常session与cookie配合使用,构成会话跟踪技术,即session-cookie机制。
session-cookie机制过程以下:
服务器生成session的id(即sessionid)后,就将它经过set-cookie传递到客户端,客户端保存这个sessionid,下次请求经过cookie回传到服务器,服务器便可经过sessionid查询到用户的session,进而得到用户状态。
示意图: