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报文包括以下三个部分:
- 起始行:报文的第一行就是起始行,在请求报文中用来说明要做什么,在响应报文中说明出现了什么情况
- 首部字段
- 主体
更多关于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代理。