HTTP学习(三)-网关、隧道、web机器人、cookie

HTTP作为现在非常重要的协议,需要仔细梳理一下。本次学习知识点来自于《HTTP权威指南》,只是文中知识点罗列,算是读书笔记,请有兴趣的读者购买《HTTP权威指南》完整阅读。

一、网关

开发者提出了网关gateway) 的概念, 网关可以作为某种翻译器使用, 它抽象出了一种能够到达资源的方法。 网关是资源和应用程序之间的粘合
剂。 应用程序可以(通过
HTTP 或其他已定义的接口) 请求网关来处理某条请求,网关可以提供一条响应。 网关可以向数据库发送查询语句, 或者生成动态的内容,就像一个门一样: 进去一条请求, 出来一个响应。 

1、CGI

CGI是第一个, 可能仍然是得到最广泛使用的服务器扩展。 在 Web上广泛用于动态HTML、 信用卡处理以及数据库查询等任务。CGI应用程序是独立于服务器的, 所以, 几乎可以用任意语言来实现, 包括 PerlTclC 和各种 shell语言。 CGI 很简单, 几乎所有的HTTP 服务器都支持它 


2、应用程序接口和Web服务
随着Web 应用程序提供的服务类型越来越多, 有一点变得越来越清晰了:HTTP可以作为一种连接应用程序的基础软件来使用。 在将应用程序连接起来的过程中, 一个更为棘手的问题是在两个应用程序之间进行协议接口的协商, 以便这些应用程序可以进行数据的交换——这通常都是针对具体应用程序的个案进行的。应用程序之间要配合工作, 所要交互的信息比HTTP 首部所能表达的信息要复杂得多。
因特网委员会开发了一组允许
Web 应用程序之间相互通信的标准和协议。 尽管Web服务Web service) 可以用来表示独立的Web 应用程序(构造模块), 这里我们还是宽松地用这个术语来表示这些标准。Web 服务的引入并不新鲜, 但这是应用程序共享信息的一种新机制。Web 服务是构建在标准的 Web 技术(比如 HTTP) 之上的。Web服务可以用 XML 通过 SOAP 来交换信息。XMLExtensible Markup Language,扩展标记语言) 提供了一种创建数据对象的定制信息, 并对其进行解释的方法。SOAPSimple Object Access Protocol, 简单对象访问协议) 是向 HTTP报文中添加
XML 信息的标准方式。 
二、Web隧道Web tunnel
Web隧道允许用户通过 HTTP 连接发送非 HTTP 流量, 这样就可以在HTTP 上捎带其他协议数据了。 使用Web 隧道最常见的原因就是要在 HTTP 连接中嵌入非 HTTP流量, 这样, 这类流量就可以穿过只允许Web 流量通过的防火墙了 。
Web 隧 道 是 用 HTTPCONNECT 方 法 建 立 起 来 的。 CONNECT 方 法 并 不 是HTTP/1.1 核心规范的一部分, 但却是一种得到广泛应用的扩展。

三、web机器人
1、爬虫
Web爬虫是一种机器人, 它们会递归地对各种信息性 Web站点进行遍历, 获取第一个 Web页面, 然后获取那个页面指向的所有 Web页面, 然后是那些页面指向的所有 Web页面, 依此类推。 递归地追踪这些 Web链接的机器人会沿着 HTML 超链创建的网络“爬行”, 所以将其称为爬虫crawler) 或蜘蛛spider)。因特网搜索引擎使用爬虫在Web 上游荡, 并把它们碰到的文档全部拉回来。 然后对这些文档进行处理, 形成一个可搜索的数据库, 以便用户查找包含了特定单词的文档。 网上有数万亿的Web 页面需要查找和取回, 这些搜索引擎蜘蛛必然是些最复杂的机器人。 我们来进一步仔细地看看这些爬虫是怎样工作的。 
2、避免环路的出现
机器人在Web 上爬行时, 要特别小心不要陷入循环, 或环路cycle) 之中。
3、大规模爬虫使用技术
树和散列表
复杂的机器人可能会用搜索树或散列表来记录已访问的 URL。 这些是加速URL查找的软件数据结构。
有损的存在位图
为了减小空间, 一些大型爬虫会使用有损数据结构, 比如存在位数组(presencebit array)。 用一个散列函数将每个URL 都转换成一个定长的数字, 这个数字在数组中有个相关的“存在位”。 爬行过一个URL 时, 就将相应的“存在位” 置位。 如果存在位已经置位了, 爬虫就认为已经爬行过那个URL 了。 
检查点
一定要将已访问 URL 列表保存到硬盘上, 以防机器人程序崩溃。
分类
随着 Web 的扩展, 在一台计算机上通过单个机器人来完成爬行就变得不太现实了。 那台计算机可能没有足够的内存、 磁盘空间、 计算能力, 或网络带宽来完成爬行任务 
4、HTMLrobot-control元标签
robots.txt文件允许站点管理员将机器人排除在 Web站点的部分或全部内容之外。robots.txt文件的一个缺点就是它是 Web 站点管理员, 而不是各部分内容的作者所有的。HTML页面的作者有一种更直接的方式可以限制机器人访问那些独立的页面。 他们可以直接在 HMTL文档中添加 robot-control标签。  
5、全文索引
全文索引就是一个数据库, 给它一个单词, 它可以立即提供包含那个单词的所有文档。 创建了索引之后, 就不需要对文档自身进行扫描了。


四、识别和认证
1、HTTP首部

2、用户认证
Web服务器无需被动地根据用户的 IP 地址来猜测他的身份, 它可以要求用户通过用户名和密码进行认证(登录) 来显式地询问用户是谁。 

只要用户输入了用户名和密码(对其身份进行完整性检查), 浏览器就会重复原来的请求。 这次它会添加一个Authorization 首部, 说明用户名和密码。 对用户名和密码进行加密, 防止那些有意无意的网络观察者看到。
现在, 服务器已经知道用户的身份了。
今后的请求要使用用户名和密码时, 浏览器会自动将存储下来的值发送出去, 甚至在站点没有要求发送的时候也经常会向其发送。 浏览器在每次请求中都向服务器发送Authorization 首部作为一种身份的标识, 这样, 只要登录一次, 就可以在整个会话期间维持用户的身份了。 
3、cookie
cookie是当前识别用户, 实现持久会话的最好方式。 前面各种技术中存在的很多问题对它们都没什么影响, 但是通常会将它们与那些技术共用, 以实现额外的价值。cookie最初是由网景公司开发的, 但现在所有主要的浏览器都支持它。cookie非常重要, 而且它们定义了一些新的 HTTP首部, 所以我们要比前面那些技术更详细地介绍它们。 cookie的存在也影响了缓存, 大多数缓存和浏览器都不允许对任何 cookie的内容进行缓存。 
可以笼统地将cookie 分为两类: 会话 cookie 和持久 cookie。 会话cookie 是一种临时 cookie, 它记录了用户访问站点时的设置和偏好。 用户退出浏览器时, 会话cookie就被删除了。 持久 cookie 的生存时间更长一些; 它们存储在硬盘上, 浏览器退出, 计算机重启时它们仍然存在。 通常会用持久 cookie 维护某个用户会周期性访问的站点的配置文件或登录名。会话cookie 和持久 cookie 之间唯一的区别就是它们的过期时间。 稍后我们会看到,如果设置了Discard 参数, 或者没有设置Expires Max-Age 参数来说明扩展的过期时间, 这个cookie 就是一个会话 cookie 
4、cookie工作机制

cookie就像服务器给用户贴的“嗨, 我叫” 的贴纸一样。 用户访问一个 Web站点时, 这个 Web 站点就可以读取那个服务器贴在用户身上的所有贴纸。
用户首次访问
Web 站点时, Web 服务器对用户一无所知Web 服务器希望这个用户会再次回来, 所以想给这个用户“拍上” 一个独有的cookie, 这样以后它就可以识别出这个用户了。cookie 中包含了一个由名字= name=value)这样的信息构成的任意列表, 并通过Set-Cookie Set-Cookie2 HTTP 响应(扩展) 首部将其贴到用户身上去
5、cookies版本0Netscape
1)NAME=VALUE强制的。 
NAMEVALUE 都是字符序列, 除非包含在双引号内, 否则不包括分号、 逗号、 等号和空格。Web 服务器可以创建任意的 NAME=VALUE 关联, 在后继对站点的访问中会将其送回给Web 服务器:Set-Cookie: customer=Mary
2)Expires 可选的。
 这个属性会指定一个日期字符串, 用来定义cookie 的实际生存期。 一旦到了过期日期, 就不再存储或发布这个cookie 了。 日期的格式为:
Weekday, DD-Mon-YY HH:MM:SS GMT唯一合法的时区为GMT, 各日期元素之间的分隔符一定要是长划线。 如果没有指定Expirescookie就会在用户会话结束时过期:Set-Cookie: foo=bar; expires=Wednesday, 09-Nov-99 23:12:40GMT
3)Domain可选的。 
浏览器只向指定域中的服务器主机名发送cookie。 这样服务器就将cookie限 制 在 了 特 定 的 域 中。 acme.com域 就 与 anvil.acme.com shipping.crate.acme.com相匹配, 但与 www.cnn.com就不匹配了。只有指定域中的主机才能为一个域设置 cookie, 这些域中至少要有两个或三个
句号, 以防止出现
.com .edu va.us等形式的域。 这里列出了一组固定的特定高层域, 落在这个范围中的域只需要两个句号。 所有其他域都至少需要三个句号。 特定的高层域包括:.com.edu.net.org.gov.mil.int.biz.info.name.museum.coop.aero .pro。如果没有指定域, 就默认为产生Set-Cookie 响应的服务器的主机名:Set-Cookie: SHIPPING=FEDEX; domain="joes-hardware.com"
4)Path可选的。 
通过这个属性可以为服务器上特定的文档分配cookie。 如果 Path 属性是一个 URL路径前缀, 就可以附加一个 cookie。 路径/foo /foobar/foo/
bar.html
相匹配。 路径“/” 与域名中所有内容都匹配。如果没有指定路径,就将其设置为产生Set-Cookie 响应的 URL 的路径:Set-Cookie: lastorder=00183; path=/orders
5)Secure可选的。
 如果包含了这一属性, 就只有在HTTP 使用 SSL安全连接时才会发送cookieSet-Cookie: private_id=519; secure 

客户端发送请求时, 会将所有与域、 路径和安全过滤器相匹配的未过期cookie 都发送给这个站点。 所有cookie 都被组合到一个 Cookie 首部中:Cookie: session-id=002-1145265-8016838; session-id-time=1007884800

6、cookies版本1RFC 2965
cookie 版本 1 的语法如下所示:
set-cookie     = "Set-Cookie2:" cookies
cookies          = 1#cookie
cookie           = NAME "=" VALUE *(";" set-cookie-av)
NAME            = attr
VALUE           = value
set-cookie-av = "Comment" "=" value
                      | "CommentURL" "=" <"> http_URL <">
                      | "Discard"
                      | "Domain" "=" value
                      | "Max-Age" "=" value
                      | "Path" "=" value
                      | "Port" [ "=" <"> portlist <"> ]
                      | "Secure"
                      | "Version" "=" 1*DIGIT
portlist           = 1#portnum
portnum         = 1*DIGIT
cookie           = "Cookie:" cookie-version 1*((";" | ",") cookievalue)
cookie-value = NAME "=" VALUE [";" path] [";" domain] [";" port]
cookie-version = "$Version" "=" value
NAME           = attr
VALUE          = value
path             = "$Path" "=" value
domain         = "$Domain" "=" value
port              = "$Port" [ "=" <"> value <"> ]
cookie2        = "Cookie2:" cookie-versio
 



7、cookie交互过程


11-5a——浏览器首次请求 Amazon.com 根页面。
11-5b——服务器将客户端重定向到一个电子商务软件的 URL 上。
11-5c——客户端对重定向的 URL 发起一个请求。
11-5d——服务器在响应上贴上两个会话 cookie, 并将用户重定向到另一个URL, 这样客户端就会用这些附加的 cookie 再次发出请求。 这个新的 URL 是个胖 URL, 也就是说有些状态嵌入到 URL 中去了。 如果客户端禁止了 cookie, 只要用户一直跟随着 Amazon.com 产生的胖 URL 链接, 不离开网站, 仍然可以实现一些基本的标识功能。
11-5e——客户端请求新的 URL, 但现在会传送两个附加的 cookie
11-5f——服务器重定向到 home.html 页面, 并附加另外两个 cookie
11-5g——客户端获取 home.html 页面并将所有四个 cookie 都发送出去。
11-5h——服务器回送内容。










 





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值