应用文章精选安全问题程序员

http权威指南 第一章HTTP概述 读书笔记

2017-09-27  本文已影响88人  八目朱勇铭

1.1HTTP——因特网的多媒体信使

HTTP可以从世界各地的Web服务器上将各种图片、html、视频等互联网资源显示在web浏览器上。使用HTTP通讯能够保证数据在传输过程中不被损坏。

1.2Web客户端和服务器

我们在浏览一个页面http://www.oreilly.com/index.html时,浏览器会向服务器www.oreilly.com发送一条http请求,参见图1-1。服务器会寻找期望的对象,本例为/index.html。如果成功,就将对象对象类型对象长度以及其他一些信息放在http响应中发送给客户端。

图1-1 客户端和服务器的一次交互过程

1.3资源

Web服务器是Web资源(Web resource)的宿主,资源包括静态文件,例如html、视频、文件以外,还包括动态生成的资源。


图1-2 Web资源

1.3.1媒体类型

因特网上有数千种不同的数据类型,Web服务器会为所有的对象数据附加一个MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)类型(参见图1-3)。当web浏览器从服务器中取回一个对象时,会去查看其MIME类型,继而采取相应的处理方式。

大多数浏览器都可以处理数百种常见的对象类型:显示图片、解析并格式化html文件、通过计算机声卡播放音频文件或者运行外部插件来处理特殊格式的数据等。

图1-3 MIME类型

MIME类型是一种文本标记表示一个主要的对象类型和一个特定的子类型,中间用‘/’来分隔

1.3.2URI

Web服务器上的每个资源都有一个名字,他们被称为统一资源标识符(Uniform Resource Identifier,URI)。这是Joe的五金商店的Web服务器上一个图片资源的URI:http://www.joes-hardware.com/specials/saw-blade.gif

图1-4显示了URI是怎样指示HTTP协议去访问Joe商店的图片资源的。给定了URI,HTTP就可以解析出对象。

图1-4 URI如何精确地说明某资源的位置以及如何去访问它 表1-1 几个URL实例
URI有两种形式,分别称为URLURN

1.3.3URL

统一资源定位符(URL)是资源标识符最常见的形式。大部门URL都遵循一种标准格式,这种格式包含三个部分:

现在,几乎所有的URI都是URL

1.3.4URN

URI的第二种形式就是统一资源名(URN)。URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关使用这些与位置无关的URN,就可以将资源四处搬移,通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。

比如,不论因特网标准文档PFC2141位于何处,(甚至可以将其复制到多个地方),都可以用下列URN来命名它:urn:ietf:rfc:2141

URN仍然处于试验阶段,还未大范围使用。URN需要一个支撑架构来解析资源的位置,而此类架构的缺乏也延缓了其被采用的进度。本书的其余部分讨论的基本上是URL

1.4事务

一个HTTP事务由一条请求命令和一条响应结果组成,这种通信通过名为http报文(HTTP message)的格式化数据块进行的,如图1-5所示。

图1-5 一次http通信

1.4.1方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。它会告诉服务器要执行什么动作,例如:获取web页面、运行网关程序、删除文件等。表1-2列出了五种常见的HTTP方法

表1-2 一些常见的HTTP方法

1.4.2状态码

每条HTTP响应都会携带一个三位数字的状态码,用于告知客户端此次响应的状态。

表1-3 一些常见的HTTP状态码

HTTP还会发送一条解释性的“原因短语”,目的是为了进行简单描述。参见上图1-5。

1.5报文

图1-7 HTTP请求、响应报文

HTTP报文(HTTP message)分为请求报文(request message)和响应报文(response message),他们的格式很类似。
HTTP报文包括以下三个部分

一个简单的报文实例

图1-8中,浏览器请求资源http://www.joes-hardware.com/tools.html

HTTP请求

HTTP响应

图1-8 http://www.joes-hardware.com/tools.html的GET事务实例

1.6连接

介绍了HTTP报文的构成之后,我们讨论报文是如何通过传输控制协议(Transmission Control Protocol,TCP)连接从一个地方搬移到另一个地方去。

1.6.1TCP/IP

HTTP是个应用层协议。HTTP无需操心网络通信的具体细节,它把联网的细节都交给了TCP/IP。TCP提供了:

HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据。TCP位于IP的上层。

图1-9 HTTP网络协议栈

1.6.2连接、IP地址及端口号

在HTTP客户端向服务器发送报文之前,需要用网际协议(Internet protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。

建立TCP连接和给公司办公司某个人打电话类似。首先拨打公司电话,进入正确的机构后,拨打要联系的那个人的分机号。在TCP中,需要知道服务器的IP地址,以及与服务器上运行的程序的TCP端口号。我们通过URL就能获取到这些信息。

几个URL:

第一个URL使用了机器的IP地址,207.200.83.29以及端口号80
第二个URL使用了域名(或称为主机名),可以通过域名服务(Domain Name Service,DNS)的机制将主机名转换为IP地址。
第三个URL没有端口号,如果HTTP请求访问的URL没有端口号,默认访问80端口。

图1-10 基本的浏览器连接处理

1.6.3使用Telnet实例

我们可以通过Telnet程序打开一条道某台机器某个端口的TCP连接,然后向它输入一些字符来直接和web服务器进行对话。web服务器会将Telnet程序作为一个web客户端来处理。

我们用Telnet与一个世纪的web服务器进行交互:使用Telnet获取http://www.joes-hardware.com:80/tools.html所指向的文档(读者可以换一个URL,我在编写此读书笔记的时候,该网站已经不维护了)

例1-1显示了对http://www.joes-hardware.com:80/tools.html的HTTP请求实例,我们输入的内容用粗体字表示

例1-1 一个使用Telnet的HTTP事务

1.7协议版本

各个HTTP的版本

1.8web的结构组件

本章的前部分,我们重点介绍了两个web应用程序:web浏览器和web服务器。还有其他的应用如下:

1.8.1代理

HTTP代理服务器是web安全、应用集成以及性能优化的重要组成模块。

如图1-11,代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,代理服务器代表用户访问服务器

图1-11 在客户端和服务器之间转发流量的代理

出于安全考虑,通常会将代理作为转发所有web流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。比如对下载的应用进行病毒检测,屏蔽网站等。

1.8.2缓存

web缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP代理服务器。可以将经过代理传送的常用文档复制保存起来,下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。

图1-12 保存常用文档本地副本以提高性能的代理缓存

客户端从附近的缓存下载文档会比从远程web服务器下载快得多。

1.8.3网关

网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议。网关接收请求时就好像自己是资源的源端服务器一样,客户端可能并不知道自己正在与一个网关进行通信。

例如,一个HTTP/FTP网关会通过HTTP请求接收对FTP URI的请求,但通过FTP协议来获取文档。得到的文档会被封装成一条HTTP报文,发送给客户端。

图1-13 HTTP/FTP网关

1.8.4隧道

HTTP隧道(tunnel)的一种常见用途是通过HTTP连接承载加密的安全套接字层(secure sockets layer ssl)流量,这样SSL流量就可以穿过只允许web流量通过的防火墙了。如图1-14,HTTP/SSL隧道收到一条HTTP请求,要求建立一条到目的地址和端口的输出连接,然后在HTTP通过上通过隧道传输加密的SSL流量,这样就就可以将其盲转发到目的服务器上去了。

图1-14 隧道可以在非HTTP网络上转发数据(显示的是HTTP/SSL隧道)

1.8.5Agent代理

Agent代理是代表用户发起HTTP请求的客户端程序。所有发布web请求的应用程序都是HTTP Agent代理。

图1-15 自动搜索引擎“网络蜘蛛”就是Agent代理,可以从全世界范围内获取Web页面
上一篇 下一篇

猜你喜欢

热点阅读