计算机网络教程-应用层(八)万维网、HTTP与cookie
一、万维网
Web 是信息宝库,其中称为网页的文档在全世界分布,并且相关的文档链接在一起。其中分布指的是,世界上每个 Web 服务器都可以增加一个新的网页到这个宝库中并向所有因特网用户宣告,而这不会使一些服务器超载。 链接指的是当用户点击这个链接时允许获取被链接的文档。现在超文本这个术语的含义已经由一开始的被链接的文本文档变成了超媒体( hypermedia)。
1.浏览器
每个浏览器通常包含三部分:控制程序、客户协议和解释程序
控制程序接收来自键盘和鼠标的输入并使用客户端程序来访问文档。在文档被访问后,控制程序使用解释程序来在屏幕上显示文档。客户协议可以是后文描述的任何一种协议,比如 HTTP 或FTP。解释程序可以是 HTML、 Java 或 JavaScript,这要取决于文档的类型。
2、统一资源定位符( Uniform Resource Locator, URL)
作为文件,网页需要有一个唯一的标识符来与其他网页区别开。为了定义一个网页,我们需要三个标识符, 主机、 端口以及路径。 在定义网页之前,我们需要告知浏览器我们想使用哪个客户-服务器应用,这称为协议。这意味着我们需要四个标识符来定义网页。 比如http默认使用80端口,若要使用不同端口则需要显示。3、静态文档
静态文档是在服务器中创建和存储的固定内容的文档。客户只能得到一个文档的副本。当客户访问文档时,一个文档的副本
被发送给用户。然后用户可以使用浏览器查看文档。静态文档使用如下语言编写: 超文本标记语言( Hypertext Markup Language, HTML)、 可扩展标记语言( Extensible Markup Language, XML), 可扩展样式表语言( Extensible Style Language, XSL)以及可扩展超文本标记语言( Extensible HypertextMarkup Language, XHTML)。
4、动态文档
当浏览器请求文档时动态文档就被网页服务器创建。当一个请求到达时,网页服务器运行一个应用程序或一个脚本来创建动态文档。服务器返回程序或脚本的结果作为对请求文档的浏览器的响应。 脚本语言如 Java Server Pages( JSP), JSP 是使用 Java 语言来编写脚本的,或者 Active Server Pages( ASP),这是使用 Visual Basic 语言编写脚本的微软产品,或者 ColdFusion,它将结构化查询语言( Structured Query Language, SQL)数据库中的查询嵌入到 HTML 文档中。
5、活动文档
对很多应用来说,我们需要在客户站点运行一个程序或脚本。这些称为活动文档。比如,假设我们想运行一个在屏幕上创建动画的程序或运行一个与用户交互的程序。程序当然需要在显示了动画或者发生了互动的客户站点运行。 JavaScript就是编写这种文档的。二、HTTP
超文本传输协议( HyperText Transfer Protocol, HTTP)是一种用来定义客户服务器程序如何编写和如何从万维网获取网页的协议。一个 HTTP 客户发送一个请求; HTTP 服务器返回响应。服务器使用 80 端口号;客户使用一个临时端口号。HTTP 使用 TCP 服务,在之前讨论过, TCP 是一种面向连接的可靠的协议。这意味着,在客户和服务器进行任何事务之前,它们之间必须建立连接。在事务之后,连接应当终止。然而,客户和服务器不需要担心交换报文中的差错以及报文的丢失。
1.持续连接与非持续连接
上图是非持续连接:1.客户开启一个 TCP 连接并发送请求。2.服务器发送响应并关闭连接。3.客户读取数据直到它遇到了文件结束标记,然后关闭连接。HTTP1.1 版默认指定了持续连接。
2.报文格式
HTTP 协议定义了请求报文和响应报文的格式。我们把两种格式并列以示比较。每一种报文由四个部分组成。请求报文中的第一部分称为请求行;响应报文的第一部分称为状态行。 剩余均相同。
请求报文
第一行为请求行,要求方法、 URL 和版本。 要求如下,最长用的是get。URL,前面部分已经讨论过了。它定义了相关网页的地址和名称。第三个字段:版本,给出了协议的版本, HTTP 最常用的版本是 1.1。
相应报文
响应报文包含状态行、头部行并且有时包含主体。
响应报文的第一行称为状态行。这一行有三个字段,它们由空格分隔开并且被两个字符(回车和换行)终止。第一个字段定义了 HTTP 协议的版本,通常为 1.1。状态码字段定义了请求的状态。它包含三个数字。在 100 范围内的代码只代表一个报告,在 200 范围内的代码表示这是一个成功的请求。在 300 范围内的代码表示把客户端重定向到另一个 URL,在 400 范围内的代码表示在客户端发生错误。最后,在 500 范围内的代码表示错误发生在服务器端。状态短语以文本格式解释了状态码。
在状态行之后,我们可以有一个或多个响应头部行。每一个头部行都从服务器向客户端发送额外的信息。例如,发送方可以发送关于文档的额外信息。每个头部行都有一个头部名称、一个冒号、一个空格和一个头部值。
3.两个实例
三、Cookie
1.cookie的作用
- 网站作为电子商店( electronic store),允许客户在商店内浏览,选择需要的商品,把它们放入电子购物车内,最后使用信用卡付费。
- 有些网站只允许注册客户( registered client)访问。
- 有些网站是门户网站( portal):用户可以选择他想看的网页。
- 有些网站仅作为广告( advertising)代理。
2.cookie的创建和存储
- 当服务器从客户端接收到请求后,它将客户端的信息存储在文件或字符串中。这些信息可能包含客户端的域名、 cookie 内容(服务器收集到的关于客户端的信息,如主机名、注册号等)、时间戳,以及与实现有关的其他信息。
- 服务器在响应中包含了它发送给客户端的 cookie。
- 当客户端接收到响应后,浏览器在 cookie 目录中存储 cookie,并根据服务器域名进行分类。
我们可以看到,cookie是由服务器创建,并传递给客户机存储的。
3.使用cookie
当客户向服务器发送请求时,浏览器在 cookie 目录中查询是否有从那个服务器发送过来的 cookie。如果有,则在请求中包含这个 cookie。当服务器接收到这个请求后,它就知道了这是一个老客户,而不是新的。注意, cookie 的内容从来不让浏览器读取或者透露给用户,只由服务器创建并回收 cookie。
4.电子商店使用cookie实例
四、代理服务器
HTTP 支持代理服务器( proxy server)。代理服务器是一台计算机,能够保存最近请求的响应的副本。 HTTP 客户端向代理服务器发送请求。代理服务器检查本地高速缓存。如果高速缓存中不存在响应报文,代理服务器就向相应的服务器发送请求。返回的响应会发送到代理服务器中,并且进行存储,以用于其他客户端将来的请求。
代理服务器降低了原服务器的负载,减少了通信量并降低了延迟。 但是, 为了使用代理服务器,必须配置客户端访问代理服务器而不是目标服务器。
五、http安全
HTTP 本质上并不提供安全。HTTP 可以在安全套接层( SSL)上运行。在这种情况下, HTTP 称为 HTTPS。 HTTPS 提供保密性、客户和服务器鉴别,以及数据完整性。