今天看了一本书《HTTP权威指南》,记录一下学习笔记,便于闲时阅读。
HTTP
HTTP 使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。Web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP协议, 因此经常会被称为 HTTP 服务器。
客户端向服务器发送 HTTP 请求,服务器会在 HTTP 响应中回送所请求的数据
Web服务器
Web服务器是Web资源(Web resource)的宿主。Web资源是Web内容的源头。最简单的 Web 资源就是 Web 服务器文件系统中的静态文件。但资源不一定非得是静态文件。资源还可以是根据需要生成内容的软件程序。
因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型(MIME type)的数据格式标签。当 Web浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,看看它是否知道应该如何处理这个对象。
URI
服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI 有两种形式,分别称为 URL 和 URN。
URL 描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
大部分 URL 都遵循一种标准格式,这种格式包含三个部分。
• URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这
部分通常就是 HTTP 协议(http://)。
• 第二部分给出了服务器的因特网地址(比如,www.baidu.com)。
• 其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)。
URN 是作为特定内容的唯一名称使用的,与目前的资源所在地无关。通过 URN,还可以用同一个名字通过多种网络访问协议来访问资源。
事务
一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为 HTTP 报文(HTTP message)的格式化数据块进行的。
HTTP方法
GET 从服务器向客户端发送命名资源
PUT 将来自客户端的数据存储到一个命名的服务器资源中去
DELETE 从服务器中删除命名资源
POST 将客户端数据发送到一个服务器网关应用程序
HEAD 仅发送命名资源响应中的 HTTP 首部
浏览器发送了一条 HTTP 请求报文。这条请求的起始行中有一个 GET命令,且本地资源为 /tools.html。这条请求说明它使用的是 1.0 版的 HTTP 协议。请求报文没有主体,因为从服务器上 GET 一个简单的文档不需要请求数据。
服务器会回送一条 HTTP 响应报文。这条响应中包含了 HTTP 的版本号(HTTP/1.0)、一 个 成 功 状 态 码(200)、 一 个 描 述 性 的 原 因 短 语(OK), 以 及 一 块 响 应 首 部 字段,在所有这些内容之后跟着包含了所请求文档的响应主体。Content-Length首部说明了响应主体的长度,Content-Type 首部说明了文档的 MIME 类型。
因特网传输协议 TCP/IP
由于TCP 提供了:
• 无差错的数据传输;
• 按序传输(数据总是会按照发送的顺序到达);
• 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。
在 TCP 中,你需要知道服务器的 IP 地址,以及与服务器上运行的特定软件相关的TCP 端口号。通过 URL获得 HTTP 服务器的 IP 地址和端口号。
http://207.200.83.29:80/index.html
http://www.netscape.com:80/index.html
http://www.netscape.com/index.html
第一个 URL 使用了机器的 IP 地址,207.200.83.29 以及端口号 80。
第二个 URL 没有使用数字形式的 IP 地址,它使用的是文本形式的域名,或者称为主机名(www.netscape.com)。可以通过一种称为域名服务(Domain Name Service,DNS)的机制方便地将主机名转换为 IP地址
最后一个 URL 没有端口号。HTTP 的 URL 中没有端口号时,可以假设默认端口号是 80。
Web的结构组件
两个 Web 应用程序(Web 浏览器和 Web 服务器)是如何相互发送报文来实现基本事务处理的。在因特网上,要与很多 Web 应用程序进行交互。
• 代理
位于客户端和服务器之间的 HTTP 中间实体。Web 安全、 应用集成以及性能优化的重要组成模块
• 缓存
HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方。
• 网关
连接其他应用程序的特殊 Web 服务器。
• 隧道
对 HTTP 通信报文进行盲转发的特殊代理。
• Agent 代理
发起自动 HTTP 请求的半智能 Web 客户端。
出于安全考虑, 通常会将代理作为转发所有 Web 流量的可信任中间节点使用。 代理还可以对请求和响应进行过滤。
可以将经过代理传送的常用文档复制保存起来。 下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了,客户端从附近的缓存下载文档会比从远程 Web 服务器下载快得多。
网关接受请求时就好像自己是资源的源端服务器一样。 客户端可能并不知道自己正在与一个网关进行通信。
一个 HTTP/FTP 网关会通过 HTTP 请求接收对 FTP URI 的请求, 但通过 FTP协议来获取文档。 得到的文档会被封装成一条 HTTP 报文, 发送给客户端。
用途是通过 HTTP 连接承载加密的安全套接字层(SSL,Secure Sockets Layer) 流量。这样 SSL 流量就可以穿过只允许 Web 流量通过的防火墙了。
一种 HTTP Agent 代理: Web 浏览器, 但用户 Agent 代理还有很多其他类型。比如, 有些自己会在 Web 上闲逛的自动用户 Agent 代理, 可以在无人监视的情况下发布 HTTP 事务并获取内容。