一、生活中的cookie
无论你知不知道Cookie是什么,在你的生活中,肯定有使用过它。还记得你使用浏览器浏览网页时,当你要登陆时,网页上有一个记住密码或自动登陆的选项,当你选择时,你就使用了Cookie。那么在下次访问该网站时,你可能就已经自动地登陆了,而不需要从重输入用户名和密码,至于它是怎么实现的,我们在下面说明。
 
为什么会有Cookie的存在?在前一篇文章,我们讲过,HTTP服务器是无状态的,即它不会记录任何的用户和连接信息。而一个Web站点通常希望能够识别用户,既可能是因为服务器想限制用户的访问,或可能是因为它想把内容与用户身份关联起来。为此,HTTP使用了cookie,它可以跟踪用户。
 
二、cookie技术的组成
在了解cookie的工作原理之前,我们先来了解一下cookie技术的组成,它由4部分组成,如下:
(1)在HTTP响应报文中有一个cookie首部行;
(2)在HTTP请求报文中有一个cookie首部行;
(3)在用户端系统中保留有一个cookie文件,由用户浏览器管理;
(4)在Web站点有一个后端数据库;
 
三、cookie的工作原理
在了解了cookie技术的组成之后,我们来看看cookie是怎么工作的。下面就以主机A中的浏览器访问网站xxx作为例子来分析cookie的工作原理吧。
 
首先主机A使用浏览器上网,当主机A第一次访问xxx网站时,当请求报文到达xxx的Web服务器时,该Web服务器将产生一个唯一识别码(例如:12345),并以此作为索引在它的后端数据库中产生一个表项,并用Set-cookie:首部行和刚才产生的值为设置HTTP响应报文的首部。这样在HTTP响应报文的首部,我们就可以看到这样的一个首部行——Set-cookie: 12345.
 
当主机A的浏览器收到该HTTP响应报文时,它会看到Set-cookie:首部,然后浏览器在它的本地cookie文件上加入一行,其中包括Set-cookie:首部行中的识别码。
 
由于主机A的cookie文件已经有了用于xxx网站的表项,因此当主机A的浏览器继续浏览xxx网站时,每请求一个Web页面,其浏览器就会从它的cookie文件中获取到xxx网站的识别码,并放入HTTP请求报文中cookie首部行中,即加入了首部行Cookie: 12345。
 
当xxx网站的服务器收到该包含Cookie首部行的HTTP请求报文后,服务器通过查询后端服务器,确定cookie标识码对应的用户,从而可以直接知道用户的信息(即知道确实有一个这样的用户,不久前登陆过该网站)。
 
注意,在cookie的方式下,xxx网站的服务器可以跟踪主机A在该站点的活动,xxx Web站点并不需要知道主机A的用户是谁,但是,它确切地知道用户12345访问了哪些页面,按照什么顺序,在什么时间。
 
简单点来说,cookie用于标识用户,用户首次访问站点时,可能需要提供一个用户标识,但在后继的访问中,浏览器向服务器传递一个cookie首部,供服务器识别该用户。因此cookie可以在无状态的HTTP上建立一个用户会话层,允许服务器通过用户与应用程序之间的会话对用户进行验证。
 
四、cookie带来的问题
 
然而,cookie的使用可能会带来一定的问题。
第一,就是用户的隐私问题,从上面的讨论中,我们可以看到,网站能过我们的cookie识别号,可以知道我们在什么时候做过什么事情。
 
第二,就是信息的安全问题,从上面的论述中,我们可以知道,服务器并没有进行必要的检查,即服务器取出包含Cookie首部行的请求报文的cookie识别号,再到后端服务器查询,就能确定用户,而不管这个请求报文是否是由原本的主机发送的报文。换句话来说,如果不怀好意的人,拿到了我们的cookie识别号,并用我们的cookie标识号填充HTTP请求报文,发送给xxx网站的Web服务器,就能冒充我们去做很多他想做的事情,获得很多他们想获得的信息。

计算机网络应用层之cookie的更多相关文章

  1. [计算机网络-应用层] HTTP协议

    1.HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心. HTTP由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行对话. ...

  2. 计算机网络-应用层(5)P2P应用

    P2P系统的索引:信息到节点位置(IP地址+端口号)的映射 在文件共享(如电驴中):利用索引动态跟踪节点所共享的文件的位置.节点需要告诉索引它拥有哪些文件.节点搜索索引从而获知能够得到哪些文件 在即时 ...

  3. 计算机网络-应用层之HTTP协议

    1.概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). ...

  4. 计算机网络(6): http cookie

    Cookie作用: 1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等) 2)跟踪浏览器的行为 3)用户自定义设置 实现方式: 当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志 ...

  5. 计算机网络-应用层(4)DNS协议

    域名系统(Domain Name System, DNS):一个分层的由DNS服务器实现的分布式数据库+一个使得主机能够查询分布式数据库的应用层协议 DNS服务器通常是运行BIND (Berkeley ...

  6. 计算机网络-应用层(1)Web应用与HTTP协议

    Web 页面(Web page,也叫文档)是由对象组成的. 对象:HTML文件.JPEG图片.视频文件.动态脚本等,通过一个URL地址寻址.每个URL地址由存放对象的服务器主机名和对象的路径名组成. ...

  7. [计算机网络-应用层] DNS:因特网的目录服务

    我们知道有两种方式可以识别主机:通过主机名或者IP地址.人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的.有着层次结构的IP地址.为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录 ...

  8. [计算机网络-应用层] FTP协议

    文件传输协议:FTP 如下图所示:用户通过一个FTP用户代理与FTP交互.该用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接.然后,该用户提供用 ...

  9. [计算机网络-应用层] P2P应用

    首先我们要先来区分一下下面的几种体系结构: CS:Client/Server 客户-服务器结构BS:Browser/Server  浏览器-服务器结构 P2P:Peer to Peer 对等结构 BS ...

随机推荐

  1. linux 隐藏权限

    原文 ------通过chattr设置档案的隐藏权限------ [root@sdc ~]#chattr --helpUsage: chattr [-RV] [-+=AacDdijsSu] [-v v ...

  2. 使用HttpClient4来构建Spring RestTemplate

    Spring RestTemplate简单说明 现在REST服务已经很普及了,在我们的程序中,经常会需要调用REST API,这时候会有很多选择,原始一点的JDK自带的,再进一步点使用HttpClie ...

  3. .NET面试题系列(二)GC

    序言 对象生存期 Phone item=new Phone() 在C#中,创建对象使用的是new关键字. 要注意的是new操作返回的并不是对象本身,而是对象的一个引用(Reference). 如果使用 ...

  4. 微信小程序迁移到头条小程序工具

    最近公司需要将微信小程序迁移到头条小程序,比较得知微信和头条小程序的写法类似,只有文件名称不同,相关的指令不同,以及头条在ttml绑定的数据不可使用function,于是就写了node脚本来实现这些重 ...

  5. Python os.path.dirname(__file__) os.path.join(str,str)

    Python os.path.dirname(__file__) Python os.path.join(str,str)   (1).当"print os.path.dirname(__f ...

  6. HTML如何编写为桌面程序

    学过/用过HTML的人应该都知道HTML是标记语言,是在网页上执行/使用的,在这里小编告诉你HTML也可以用来做桌面程序,这种桌面程序一般是微客户端 工具/原料   html dreamweaver ...

  7. mysq配置

    mysql运维 1.mysql配置文件:/etc/my.cnf mysql日记文件 :安装时候配置的,可以通过ps aux|grep mysqld 查询 ps aux|grep mysqld mysq ...

  8. device tree --- #address-cells and #size-cells property

    device tree source Example1 / { #address-cells = <0x1>; // 在 root node 下使用 1 個 u32 來代表 address ...

  9. SQLite3 使用教学

    source: SQL中文站:http://www.sqlite.com.cn/MySqlite/4/378.Html OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具 ...

  10. Linux 上配置 NTP SERVER

    在CENTOS 6.2上面安装配置NTP SERVER 安装NTP:yum install ntp 配置时间源vi /etc/ntp.confserver 210.72.145.44server nt ...