Fork me on GitHub

HTTP概述

http概述

HTTP-因特网的多媒体信使

每天,都有数以亿计的JPEG图片,HTML页面,文本文件,MPEG电影,WAV音频文件,java小程序和其他资源在因特网上游也。HTTP可以从遍布全世界的Web服务器上将这些信息块,迅速,边界,可靠的搬移到人们的Web浏览器上去。

HTTP使用的是可靠地数据传输协议,因此数据来自地球的另一端,他也能够确保数据在传输过程中不会损坏或产生混乱。这样,用户在访问信息时就不用担心其完整性了,因此对于用户来说,这是件好事。而对于因特网应用程序开发人员来说也同样如此,因为这样就无须担心HTTP通信会在传输过程中被破坏,复制或产生畸变了。

Web客户端和服务器

Web内容是储存在web服务器上的。web服务器使用的HTTP协议,因此经常会被称为HTTP服务器。这些HTTP服务器储存了因特网中的数据源,如果HTTP客户端发出请求的话,他们会提供数据。客户端向服务器发送HTTP请求,服务器会在HTTP响应中送回所请求的数据,可能我们每天都在使用HTTP客户端。最常见的客户端就是web浏览器,web浏览器向服务器请求HTTP对象,并将这些对象显示在你的屏幕上。

浏览一个页面时,浏览器会想服务器发送一条HTTP请求,服务器会寻找所期望的对象,如果成功美酒将对象,对象类型,对象长度以及其他一些信息放在HTTP响应中发送给客户端。

资源

Web浏览器是Web资源的宿主。web资源是web内容的源头。最简单的web资源就是wen服务器文件系统中的静态资源。这些文件可以包含任意内容:文本文件,HTML文件,Word文件,图片,电影等。
但资源不一定非得是静态资源。资源还可以是根据需要生成内容的软件程序。这些动态内容资源可以根据你的身份,所请求的或每天不同时间段来产生内容。他们可以为你显示照相机中的照片,也可以进行股票交易,搜索引擎等。

总之,所有类型内容来源都是资源。

媒体类型

因特网上有数千种不同的数据类型,HTTP仔细的给每种要通过Web传输的对象都打上了名为MIME类型的数据格式标签。最初设计MIME(多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时,存在的问题。MIME在点在邮件系统中工作得非常好,因此HTTP也采纳了它,用它来描述并标记多媒体内容。

Web服务器会为所有HTTP对象数据附加一个MIME类型,当web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看他们是否知道应该如何处理这个对象。大多数的浏览器都可以处理数百种常见的对象类型:显示图片文件,解析并格式化HTML文件,通过计算机生科播放音频文件,或者运行外部插件来处理特殊格式的数据。

MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的自立诶性,中间由一条斜杠分割。

  • HTML格式的文本文档由text/html类型来标记
  • 等等
URI

每个Web服务器都有一个名字,这样客户端就可以说明他们感兴趣的资源师什么了。服务器资源名被称为统一资源标识符(URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一表示并定位信息资源。

URI有两种形式,分别是URL和URN。

URL

统一资源定位符(URL)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。他们可以说明如何从一个精确,固定的位置获取资源。

URL都遵循一种标准格式,这种格式宝海三个部分。

  • URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP协议。
  • 第二部分给出了服务器的因特网地址
  • 其余部分指定了Web服务器上的某个资源的。
    现在,几乎所有的URI都是URL。
URN

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

事务

我们来仔细看看客户端是怎样通过HTTP与web服务器及其资源进行事务处理的。一个HTTP事务由一条(从客户端发往服务器的)的请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为HTTP报文的格式化数据块进行的。

方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法。每条HTTP请求报文都包含一个方法。这个方法告诉服务器要执行什么动作(获取一个web页面,运行一个网关程序,删除一个文件等)。

五种常见的HTTP方法:

  • GET 从服务器向客户端发送命令资源。
  • PUT 将来自客户端的数据储存到一个命名的服务器资源中去。
  • DELETE 从服务器中删除命名资源。
  • POST 将客户端数据发送到一个服务器网关应用程序。
  • HEAD 仅发送命名资源响应中的HTTP首部。
状态码

每条HTTP响应报文返回时都会携带一个状态吗。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。

  • 200 OK。文档正确返回。
  • 302 重定向 到其他地方去获取资源。
  • 404 没找到 无法找到这个资源。
web页面中可以包含多个对象

应用程序完成一项任务时通常会发布多个HTTP食物。比如。web浏览器会发布一系列HTTP事务来获取并显示一个包含了丰富图片的web页面。浏览器会执行一个事务来获取描述页面布局的HTML框架,然后发布另外的HTTP事务来获取每个嵌入式图片,等。这些嵌入式资源甚至可能位于不同的服务器上。因此一个web页面通常不是单个资源,而是一组资源的集合。

报文

HTTP报文是由一行行的简单的字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以方便的对其读写。

从web客户端发往web服务器的HTTP报文称为请求报文。从服务器发往客户端的报文称为响应报文。此外没有其他类型的HTTP报文。

HTTP报文包括以下三个部分。

  • 起始行
    报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说名出现了什么情况。
  • 首部字段
    起始行后面有个零或者多个首部字段,每个首部字段都包含一个名字和一个值,为了便于解析,两着之间用冒号来分隔。首部以一个空格结束。添加一个首部字段和添加新行一样简单。
  • 主体
    空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主题中包括了要发送的web服务器的数据;响应主题中装在了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主题中可以包含任意的二进制数据(如图片,视频等),当然,主体中也可以包含文本。

连接

TCP/IP

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

  • 无差错的数据传输
  • 按序传输(数据总会按照发送的顺序到达)
  • 未分段的数据流(可以在任意时刻以以任意尺寸将数据发送出去)

因特网自身就是基于TCP/IP的,TCP/IP是全世界的计算机和网络设备常用的层次化分组交换网络协议集。TCP/IP隐藏了各种网络和硬件的特点及弱点,是各种类型的计算机和网络都能够进行可靠的通信。

只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失,不会被破坏,也不会在接收时出现错序了。

用网络术语来说,HTTP协议位于TCP的上层。HTTP使用TCP来传输其报文数据。与之类似,TCP则位于IP的上层。

连接,IP地址及端口号

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

建立一条TCP连接的过程与给公司办公室的某个人打电话过程类似。首先,要拨打公司的电话号码。这样就能进入正常的机构了。其次,拨打要联系的那个人的分号机。

在TCP中,你需要知道服务器的IP地址,一级与服务器上运行的特定的软件相关的TCP端口号。

这就行了,但最初怎么获得HTTP服务器的IP地址和端口号呢?当然是通过URL了!我盟前面曾经提到过,URL就是资源的地址,所以自然能够为我们提供储存资源的机器的IP地址。我们来看几个URL:

输入URL发生了什么?步骤如下:

  • 浏览器从URL中解析出服务器的主机名;
  • 浏览器将服务器的主机名转换成服务器的IP地址;
  • 浏览器将端口号(如果有的)从URL中解析出来;
  • 浏览器建立一条与web服务器的TCP链接;
  • 浏览器向服务器发送一条HTTP请求报文;
  • 服务器向浏览器返回一条HTTP响应报文;
  • 关闭连接,浏览器显示文档;
使用Telnet实例

由于HTTP使用了TCP/IP传输协议,而且它是基于文本的,没有使用那些难以理解的二进制格式,因此很容易直接与web服务器进行对话。

Telnet程序可以将键盘链接到某个目标TCP端口,并将此TCP端口输出回送到显示屏上。Telnet常用于。。。。。。

协议版本

现在使用的HTTP协议有几个版本。HTTP应用程序要尽量强健的处理各种不同的HTTP协议变体。目前人在使用的版本如下。

  • HTTP/0.9
    HTTP的1991原型版本成为HTTP/0.9。这个协议有很多严重的设计缺陷,只应该用于老客户端的交互。HTTP/0.9只支持GET方法,不支持多媒体内容的MIME类型,各种HTTP首部,或者版本号。HTTP/0.9定义的初中是为了获取简单的HTML对象,它很快就被HTTP/1.0取代了。
  • HTTP/1.0
    1.0是第一个得到广泛使用的HTTP版本。HTTP/1.0添加了版本号。各种HTTP首部,一些额外的方法,以及对多媒体处对象的处理。HTTP/1.0使得包含生动图片的web页面和交互式表格成为可能,而这些页面和表格促使万维网为人们广泛的接受。这个规范从未得到良好的说明。在这个HTTP协议的商业演讲和学术研究都在快速进行的时代,它集合一系列的最佳实践。
  • HTTP/1.0+
  • HTTP/1.1
    HTTP/1.1重点关注的是校正HTTP设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除一些不好的特性。HTTP/1.1还包含了对20世纪90年代末正在发展中的更复杂的web应用程序和部署方式的支持。HTTP/1.1是当前使用的HTTP版本。
  • HTTP-NG(又名HTTP/2.0)
    HTTP-NG是HTTP1.1后继结构的原型建议,他重点关注的是性能的大幅优化,以及更强大的服务逻辑远程执行框架。HTTP-NG的研究工作终止于1998年。

web的结构组件

在本章中,重点介绍了两个web应用程序(web浏览器和web服务器)是如何相互发送报文来实现基本事务处理的。在因特网上,要与很多web应用程序进行交互。

如下:

  • 代理
    位于客户端和服务器之间的HTTP中间的实体。
  • 缓存
    HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。
  • 网关
    连接其他应用程序的特殊web服务器。
  • 隧道
    对HTTP通信报文进行盲转发的特殊代理。
  • Agent
    发起自动HTTP请求的半智能web客户端。
代理

首先我们来看看HTTP代理服务器,这是web安全,应用集成以及性能优化的重要组成模块。

代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。

出于安全考虑,通常会将代理作为转发所有Web流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。比如,在企业中对下载的应用程序进行病毒检测,或者对小学生屏蔽一些成人才能看到的内容。

缓存

web缓存或者代理缓存是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。客户端从附近的缓存下载文档会比从远程服务器下载快的多。HTTP定了很多功能,是个缓存更加高效。

网关

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

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

隧道

隧道是建立起来之后,就会在两条链接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。

HTTP隧道的一种常见用途是通过HTTP连接承载加密的安全套接字层(SSL)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了。

如下图:
image
HTTP/SSL隧道收到一条HTTP请求,要建立一条到目的地址和端口的输出的连接,然后在HTTP信道上通过隧道传输加密的SSL流量,这样就可以将其盲发到目的服务器上去了。

Agent代理

用户Agent代理是代表用户发起的HTTP请求的客户端程序。所有发布web请求的应用程序都是HTTP Agent代理。到目前为止,我们只提到过一种HTTP Agent代理:文本浏览器,单用户Agent代理还有很多其他类型。

比如:有些自己会在web上闲逛的自动用户Agent代理,可以在无人监视情况下发布HTTP事务并获取内容。这些自动代理的名字通常都很生动,如“网络蜘蛛”或者“web机器人”。

-------------本文结束感谢您的阅读-------------
如果觉的文章对你有帮助,打赏小二点银子吧!