5. HTTP协议, Session and Cookie
2018-05-06 本文已影响0人
何大炮
HTTP协议
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器,网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口80)的HTTP请求。
HTTP可以在任何其他互联网协议上,或者在其他网络上实现,作用在应用层。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。多数使用TCP/IP协议。
ping属于ICMP协议,属于网络层。
特点:通常都是server端都是被发起,也就是说server无法主动发起http请求。
流程:建立连接,发起请求,接受返回消息,显示消息断开连接。
类型:分为两类
- 客户机向服务器的请求消息
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
在Django中,该信息由它自动包装,view中通常以request承接。
django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性 - 服务器向客户机的响应消息
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
由程序员构造的一个对象,定义于django.http。不需要返回模板,直接返回该对象。
Session的概念
对于一个服务器,他同时可能会处理成千上万的请求,他是如何区别不同的用户?或者说如何给特定的用户提供不同的服务呢?
这里就要用到Session这个概念,就像是一段发生在一对一之间的会话,我先告诉你‘我是谁’,你再根据我是谁来回复我的话。(实现通话中断和恢复的操作)
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
Session的实现
既然要根据对方是谁来回复客户端的问题,那么我server端肯定要存储相关的信息。所以session在server端就是一个数据结构,存放了各个客户的信息。所以客户端是不可操作的。
这里还有个问题,‘我是谁’这个信息是存放在哪里的呢?Cookie
Cookie
存在于客户端的数据结构,记录了用户的信息,同时也包括了session id,这个用于Session后台识别的‘我是谁’。客户端是可以操作的。
Summery
- 存储地方不同
- session只会因为服务器端的操作而变化,Cookie只受到客户端影响。比如浏览器窗口关闭,session没有任何影响,但是Cookie就可能会受影响。
- Cookie帮助了session的实现。两者都是存储信息的载体。
- 如果Cookie被禁用,那么通过url重写或者显示传递都可以将session_id传递到后台。