圓梦

激情燃燒的歲月
随笔 - 16, 文章 - 40, 评论 - 8, 阅读 - 29431
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

新手入门:了解WWW服务与HTTP协议4

Posted on   szw104  阅读(268)  评论(0编辑  收藏  举报
用户—服务器交互

  身份认证和cookie

  我们已经知道HTTP服务器是无状态的。这样的处理可以简化服务器程序的设计,以便开发出更高性能的Web服务器软件。然而,一个Web站点往往有标识其用户的需求,因为其web服务器可能希望限制用户的访问,也可能想要根据用户的身份来提供内容。HTTP提供了两种帮助服务器标识用户的机制:身份认证和cookle。

  身份认证许多web站点要求用户提供一个用户名—口令对才能访问存放在其服务器中的文档。这种要求称为身份认证(authentication)。HTTP提供特殊的状态码和头部来帮助Web站点执行身份认证。我们通过查看一个例子来领会这些特殊的状态码和头部如何工作。假设有—个客户在请求来自某个服务器的一个对象,而该服务器要求用户授予权限。

  客户首先发送一个不合特殊头部的普通请求消息。服务器以空的附属体和一个“401Authorization Required”状态码作为响应。服务器还在这个响应消息中包含“个WWW-Authenticate:头部,说明具体如何执行身份认证。这个头部的典型值是指出用户需要提供一个用户名—口令对。

  客户收到这个响应消息后提示用户输入用户名和口令,然后重新发送请求消息。这一回客户在请求消息中包含了一个Authorization:头部,其中包含有用户输入的用户名和口令。

  取得第一个对象后,客户在同为请求该服务器上对象的后续请求中继续发送这个用户名—口令对。这个做法一般将持续到用户关闭浏览器为止。在浏览器未被关闭之前,这个用户名—口令对是高速缓存着的,因此浏览器不会每请求一个对象就提示用户输入一次用户名和口令。通过上述方式,要求用户授权的Web站点就能标识出每个请求的用户了。

  我们需要知道,HTTP执行的是一种相当脆弱的身份认证方式,不难攻破。现代有很多更为安全的认证方式,我们会在以后介绍。

  cookie是一种可让Web站点用来跟踪用户的候选机制,定义在RFC 2109中。有些Web站点使用cookie,其他Web站点则不用。下面查看一个例子。假设一个客户首次联系一个使用cookie的web站点。服务器会在其响应中包含一个Set—Cookie:头部。该头部的值可以是一个由Web服务器产生的客户标识数.例如:

  Set-Cookie:1678453

  客户收到这个响应消息,看到其中的Set-Cookie:头部和标识数后,会在存放在客户主机中的某个特殊的cookie文件中添加一行。这一行一般包含服务器主机的主机名和这个与用户关联的标识数。在一段时间(如一个星期)之后请求同一个服务器时,由同一个用户启动的新客户会在请求消息中包含一个cookie头部,其值为早先由该服务器产生的标识数,例如:Cookie:1678453

  在这种方式中,服务器并不知道提出请求的用户的用户名,但是它确实知道该用户与一个星期前提出请求的用户是同一个。

  Web服务器有多个使用coohe的目的:

  ●如果服务器要求身份认证,但又不想在同一用户每次访问本Web站点时都麻烦他输入用户名和口令,那么可以设置一个cookie。

  ●如果服务器想要记住用户的偏好,以便在他们后续访问期间有目的地提供广告,那么可以设置一个cookie。

  ●如果web站点提供购物服务,那么服务器可以使用cookie跟踪用户购买的物品,就是建立一个虚拟的购物车。

  需指出的是,cookie不适用于会从不同主机访问同一web站点的游动用户。这种情况下,该web站点会把同一个用户在不同主机上的使用看成是由新的用户执行的。

点击右上角即可分享
微信分享提示