如何在HTTP客户端与服务器端之间保持状态
2016-03-21 11:12
477 查看
HTTP协议与状态保持 HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样。 然而聪明(或者贪心?)的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另一方面在服务器端则出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议也添加了文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。 让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案: 1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。 2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。 3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。 <p>由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择</p><p>原文地址:<a target=_blank href="http://blog.csdn.net/guoqingcun/article/details/12705623">http://blog.csdn.net/guoqingcun/article/details/12705623</a></p>
相关文章推荐
- iOS应用架构谈 网络层设计方案
- HTTP Content-type 常用对照表
- 解决IIS7 PHP HTTP 500内部服务器错误问题
- PHP开发-用curl向https发请求时的35号错误 - 琴剑飘零
- C++基于TCP和UDP的socket通信
- TCP与UDP的区别,以及它们各自的定义
- Apache 的 httpd.conf 详解(很实用)
- HTTP 的重定向301,302,303,307(转)
- Linux环境利用tcpdump对网络数据进行抓包
- PHP中的$_SERVER[\"HTTP_REFERER\"]用法浅谈
- IIS&Apache虚拟主机设置(主机头,一服多站)httpd.conf
- socket实现TCP通信_TCP连接android与单片机(2016_03_21)
- 面对网络色情的试探,基督徒…
- 网络版的数据库操作类
- Ubuntu下搭建http访问方式的SVN服务器
- <meta http-equiv=...> 的功能
- 关于千千静听在win7系统下无法打开网络媒体
- 1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 HTTP_CLIENT_IP
- Python + Graphviz 绘制神经网络结构图
- iOS对https的支持