概述
本章是对http进行简单介绍。特别要关注以下方面的内容:
- web客户端与服务器是如何通信的;
- web的资源来自何方;
- web的事务是怎样工作的;
- http通信所使用的报文格式;
- 底层tcp网络传输;
- 不同的http协议变体;
- 因特网上安装的大量http架构组件的一部分;
1.1 http-因特网多媒体的信使
http采用的是可靠的数据传输协议,因此用户在访问信息时就不用担心其完整性,而开发人员可以专注于应用程序特有细节的编写。
1.2 web客户端与服务器
web的内容存储在web服务器上,web服务器使用的是http协议,因此也被称为http服务器。可能你每天都在使用http客户端,最常见的是web浏览器,比如ie,firefox,chrom....它们向服务器请求http对象,并将这些对象显示在你的屏幕上。
1.3资源
web服务器是web资源(web resource)的宿主。这些资源包括web文件系统中的静态文件和根据不同请求内容,身份,时间产生的资源。典型静态文件:文本文件,html文件,图片,avi电影...。典型动态资源:搜索引擎的结果,股票交易的信息,在线购买礼物...。
1.3.1媒体类型
因特网有不同类型的资源,http要给每种通过web传输的对象打上名为mime(multipupose internet mail extension,多用途因特网邮件扩展)类型。这样当web浏览器获得http乡音后就可以正确处理这些对象。
1.3.2uri
每一个web服务器资源都有名字,这样客户端就可以说明他们感兴趣的资源是什么。服务器字原名被称为统一资源标识符(uniform resource identifier ,uri).uri有两种形式url和urn。
1.3.3url
统一资源定位符(uniform resource locator,url)是资源变支付最常见的形式。大部分url遵循一种标准格式,该格式包含三个部分。
- url的第一部分称为方案(scheme)说明了资源所使用的协议,例如http协议。
- 第二部分是服务器的因特网地址,例如www.baidu.com。
- 其余部分指定了web服务器上的某个资源。例如/index.html
1.3.4urn
统一资源名称 (Uniform Resource Name, URN)。urn作为指定特定内容的唯一名称使用的,与目前资源所在地无关。通过urn可以使用同一个名字通过多种网络访问协议来访问资源。
比较重要的使用是p2p中的磁力链接是urn的一种实现。在本书的其他未知不会区分url和uri。
1.4事务
一个http事务是有一条请求指令和一个响应结果组成的这种通信是通过名为http报文的格式化数据块进行的。
1.4.1方法
http支持的不同请求指令,这些指令被称为http方法。每条http请求报文都包含一个方法。这个方法告诉服务器要执行什么动作。例如get,post,delete这些方法将在第三章进行详细介绍。
1.4.2状态码
每条http响应返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者采取其它动作。
http状态码 | 描述 |
---|---|
200 | ok,文档正确返回 |
302 | redirect(重定向)到其他地方获取资源 |
404 | not found(没找到)无法找到这个资源 |
1.4.3web页面中可以包含多个对象
应用程序完成一项任务需要发布多个http事务。比如:获取一个包含了丰富图片的web页面。浏览器会执行一个事务来获取页面布局的html“框架”然后发布另外的http事务来获得其它的图片,java程序等。这些资源甚至可能位于不同的服务器。
1.5报文
http报文是由一行行简单的字符串组成的。http报文都是纯文本,而不是二进制代码,人们可以很方便的进行读写。
从web客户端发送的报文称为请求报文(request message)。从服务器发送的报文称为响应报文(response message)此外没有其它类型的http报文。
http报文包括三个部分:
起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。首部字段
起始行后有零个或多个首部字段。每个首部字段包含一个名字和一个值,为了便于解析,两者之间用冒号来分割。首部以一个空行结束主体
空行之后就是可选的报文主体,其中包含了所有类型的数据。请求主题包括了要发送给web服务器的数据,响应主体中装载了要返回给客户端的数据,起始行和首部都是文本形式而且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据。当然也可以是文本。
1.6连接
1.6.1tcp
http是应用层协议,http无需操心网络通信的具体细节,它把联网的具体的细节交给了网络传输协议tcp。
tcp协议提供了:
- 无差错的数据传输;
- 按序传输(数据总会按照发送的顺序到达);
- 未分段的数据流(可以在任何时刻以任意尺寸将数据发送出去)。
1.6.2连接、ip地址、端口号
http客户端向服务器发送报文前需要用网际协议(internet protocol ip)地址和端口号在客户端和服务器之间建立一条tcp连接。
在tcp中,你需要知道服务器的ip地址以及服务器上运行的特定软件的tcp端口号。
url可以使用主机名(域名)或ip地址,使用主机名会被域名解析服务(domain name service ,dns)转换为ip地址。如果不明确指定端口号,会使用默认的80端口。
基本浏览器的连接处理步骤如下:
- 浏览器从url中解析初服务器的主机名;
- 浏览器将服务器的主机名转换为服务器的ip地址;
- 浏览器将端口号从url中解析出来;、
- 浏览器简历一条与web服务器的tcp连接;
- 浏览器向服务器发送一条http请求报文;
- 服务器向浏览器回送一条http响应报文;
- 关闭连接,浏览器显示文档;
1.6.3使用tclnet实例
由于http使用了tcp传输协议,而且它是基于文本的没有那种难以理解的二进制,因此很容易直接与web服务器进行对话。
telnet程序将键盘连接到某个目标tcp端口,并将tcp端口的输出回送到显示屏上,telnet常用于远程会话,但它几乎可以连接所有的头层皮服务器,包括http服务器。
虽然如此,但telnet做脚本自动化十分复杂,如果你想要使用更灵活的工具可以看看nc(netcat)通过nc可以方便地操作能够udp和tcp的流量。
1.7协议版本
不想写,都是历史
1.8web的结构组件
- 代理
位于客户端与服务器之间的http中间实体。 - 缓存
http的仓库,使用常用页面的副本可以保存在离客户端更近的地方。 - 网关
连接其它应用程序的特殊web服务器。 - 隧道
对http通信报文进行盲转发的特殊代理。 - agent代理
发起自动http请求的半智能web客户端。
1.8.1代理
http代理服务器是web安全,应用集成以及性能优化的重要组成模块。代理位于客户端与服务器之间接受所欲客户端的http请求。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。
出于安全考虑,通常会将代理作为转发所有web流量的中间结点使用,代理还可以对请求和响应进行过滤。
1.8.2缓存
web缓存(web cache)或代理缓存(proxy cache)是一种特殊的http代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同意文档的客户端就可以享受缓存的私有副本所提供的服务了。
1.8.3网关
网关(gateway)是一种特殊的服务器,作为其它服务器的中间实体使用。通常将http流量转换成其它协议。网管接受请求就好像自己是资源服务器一样。客户端可能并不知道自己在与一个网管进行通信。
1.8.4隧道
隧道(tunnel)是建立起来之后,就回在两条连接之间对原始数据进行盲转发的http应用程序。http隧道通常用来在一条或多条http连接上转发非http数据,转发时不会窥探数据。
http隧道的一种常见用途是通过http连接承载加密的安全套接字(secure sockets layer,ssl)流量
这样ssl流量就可以穿过只允许web流量通过的防火墙了
1.8.5agent代理
用户agent代理是代表用户发起http请求的客户端程序。所有发布web请求的应用程序都是http agent代理到目前为止,我们肢体到web浏览器,但用户agent代理还有很多形式,例如:网络爬虫(spiders)
1.9起始部分结束语
这就是我们对http的简要介绍。本章中,我们重点介绍了作为多媒体传输协议使用的http。简要说明了http是怎样使用uri来命名远程服务器上的多媒体资源的,粗略的介绍了如何利用http请求和响应报文操纵远程服务器的多媒体资源,最后考察了几种使用http的web应用程序。