Web应用安全威胁与防治
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 HTTP简介

超文本传输协议(HyperText Transfer Protocol,HTTP)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是提供一种发布和接收HTML页面的方法。

HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC 2616 http://www.ietf.org/rfc/rfc2616.txt

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。我们称这个客户端为用户代理(user agent)。应答的服务器上存储着一些资源,如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,如代理、网关,或者隧道(tunnel)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和基于它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。

通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口,不过其他端口也可以使用)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器向客户端发回一个状态行,如"HTTP/1.1 200 OK",和响应的消息,消息的消息体可能是请求的文件、错误消息、或者其他一些信息。

HTTP使用TCP而不是UDP的原因在于打开一个网页必须传送很多数据,而TCP协议提供传输控制、按顺序组织数据和错误纠正。具体细节请参考“TCP和UDP的不同”。在互联网或其他网络上,这并不妨碍HTTP应用在其他协议的顶端。HTTP仅仅期望可靠的传输,任何提供这种保证的协议都可以使用。

通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP是一种通用的、不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外,还可以通过扩展它的请求方式、错误代码和报头来完成许多任务。HTTP的一个特点是数据表示方式的典型性和可协商性允许独立于传输数据而建立系统。在1990年WWW全球信息刚刚起步的时候HTTP就得到了应用。HTTP的第一个版本叫做HTTP 0.9,是一种为互联网原始数据传输服务的简单协议。由RFC 1945定义的HTTP 1.0进一步完善了这个协议。它允许消息以类似MIME的格式传送,包括有关数据传输的维护信息和关于请求/应答的句法修正。但是,HTTP 1.0没有充分考虑到分层代理,高速缓存的作用以及对稳定连接和虚拟主机的需求。并且随着不完善的进程应用的激增,HTTP 1.0迫切需要一个新的版本,以便使两个通信应用程序能够确定彼此的真实性能。于是HTTP 1.1很快问世,RFC 2616定义了HTTP协议中一个现今被广泛使用的版本——HTTP 1.1。

HTTP也是用于用户代理之间及代理/网关到其他网络系统的通用通信协议,这样的网络系统可能由SMTP、NNTP、FTP、Gopher和WAIS协议支持。这样,HTTP允许不同的应用程序对资源进行基本的超媒体访问。

HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站账户和敏感信息等。所以,很快又推出了HTTPS协议。