HTTP 概述

Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。HTTP是现代全球因特网中使用的公共语言。

HTTP

HTTP(Hypertext Transfer Protocol),中文一般翻译为“超文本传输协议”,HTTP使用的是一种可靠的数据传输协议,使用HTTP通信能够保证数据在传输的过程中不会被损坏或产生混乱

Web客户端和服务器

Web内容都是存储在服务器上的,Web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器。

如果HTTP客户端发出请求的话,它们会提供数据。

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

资源

Web服务器是Web资源的宿主。

所有类型的内容来源都是资源。包含公司销售预测电子表格的文件是一种资源、扫描本地公共图书馆书架的Web网关也是一种资源。

媒体类型

HTTP中的媒体类型名为:MIME类型。

Web服务器会为所有HTTP对象数据附加一个MIME类型。

MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔:

  • HTML 格式的文本文档由 text/html 来标记
  • 普通的ASCII文本文档由text/html 类型来标记
  • JEPG格式的图片为image/jepg类型…

URI

URI(Uniform Resource Identifier, URI),统一资源标识符

URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。

URI有两种形式:URL 和 URN

URL

称为:统一资源定位符,是资源标识符最常见的形式。

URL描述了一台特定服务器上某资源的特定位置,它们可以说明如何从一个精确、固定的位置获取资源。

大部分URL都遵循一种标准格式,这种格式包含三个部分

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

几乎所有的URI都是URL

URN

称为:统一资源名。

URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。

通过URN,就可以用同一个名字通过多种网络访问协议来访问资源

更多关于URL的内容:URL与资源

事务

一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。

这种通信是通过名为HTTP报文(HTTP message)的格式化数据块决定的。

方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。每条HTTP报文都包含一个方法,这个方法告诉服务器要执行什么动作。

这是五种常见的HTTP方法:

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

状态码

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

这是几个常见的状态码:

  • 200 OK(响应成功),文档正确返回
  • 302 Redirect(重定向),到其他地方去获取资源
  • 404 Not Found(没找到),无法找到这个资源
  • 403 Forbidden (资源不可用)

更多关于状态码的内容:

报文

HTTP报文是由一行一行的简单字符串组成的,可以方便地对其进行读写。

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

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

  1. 起始行:报文的第一行就是起始行,在请求报文中用来说明要做什么,在响应报文中说明出现了什么情况
  2. 首部字段
  3. 主体

更多关于HTTP报文的内容:

连接

TCP/IP

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

TCP(Transmission Control Protocol)提供了:

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

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

连接、IP地址及端口号

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

协议版本

现在使用的HTTP协议有几个版本:

  • HTTP/0.9 只支持GET方法,不支持多媒体内容的MIME类型、各种HTTP首部,或者版本号
  • HTTP/1.0 是第一个得到广泛使用的HTTP版本,支持的类型较为完善
  • HTTP/1.0+ 一般为非正式的HTTP扩展版本
  • HTTP/1.1 重点关注的是校正HTTP设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除一些不好的特性
  • HTTP-NG 是HTTP/1.1后继结构的原型建议,它重点关注的是性能的大幅优化,以及更强大的服务器逻辑远程执行框架

Web的结构组件

  • 代理

    位于客户端和服务器之间的HTTP中间实体

  • 缓存

    HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方

  • 网关

    连接其他应用程序的特殊Web服务器

  • 隧道

    对HTTP通信报文进行盲转发的特殊代理

  • Agent代理

    发起自动HTTP请求的半智能Web客户端

代理

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

代理位于客户端和服务器之间,接受所有客户端的HTTP请求,并将这些请求转发给服务器。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。

出于安全考虑,通常会将代理作为转发所有Web流量的可信任中间节点使用。

代理还可以对请求和响应进行过滤。

缓存

Web缓存或代理缓存是一种特殊的HTTP代理服务,可以将经过代理传送的常用文件复制保存起来。

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

网关

网关是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议,网关接受请求时就好像自己是资源的服务器一样。

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

隧道

隧道是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。

HTTP隧道通常用来在一条或者多条HTTP连接上转发非HTTP数据,转发时不会窥探数据

Agent代理

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