HTTP权威指南读书笔记(一)

媒体类型:

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

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

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

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

QQ图片20130721135951

 

URI

每一个web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。

服务器资源名被称为綂一资源标识符(Uniform Resource Identifier),在世界范围内唯一标识并定位信息资源。

http://linuxsogood.org/linux/shell/493.html

这是我博客里的一个URI,URI有两种形式,分别称为URL和URN。

URL 统一资源定位符是资源标识符中最常见的形式。URL描述了一台特定服务器上某资源的特定位置。

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

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

URL的语法: 大多数URL方案都建立在以下9个部分构成的通用格式上

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

几乎没有哪个URL中包含了以上所有的组件。URL最重要的3个部分是方案(scheme)、主机(host)、和路径(host)

  • 方案: 访问服务器以获取资源时要使用哪种协议
  • 用户:某些方案访问资源时需要的用户名
  • 密码:用户名后面可能要包含的密码,中间由冒号分隔
  • 主机:资源宿主服务器的主机名或点分IP地址
  • 端口:资源宿主服务器正在监听的端口号,很多方案都有默认端口号(HTTP默认端口号为80)
  • 路径:服务器上资源的本地名,由一个斜杠将其与前面的URL组件分隔开,路径组件的语法是与服务器和方案有关的。
  • 参数:某些方案会用这个组件来指定输入参数。参数为键/值对。URL中可以包含多个参数字段,它们相互之间以及与路径的其余部分用分号分隔
  • 查询:某些方案会用到这个组件传送参数以激活应用程序(比如数据库、公告板、搜索引擎以及其它)。查询组件的内容没有通用格式,用字符?将其与URL的其它组件分隔开来
  • 版段:一小片或一部分资源的名字。引用对象时,不会交接frag字段传送给服务器,这个字段是在客户端内部使用的。通过字符#将其与URL的其余部分分隔开来

URN

URI的第二种形式就是统一资源名(URN)。URL是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。比如,不论因特网标准文档RFC2141位于何处,都可以通过URN来命名它:

urn:ietf:rfc:2141

URN仍然处理试验阶段,还没大范围使用。为了更有效的工作,URN需要一个支撑架构来解析资源的位置。

事务

一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过HTTP报文(HTTP message)的格式化数据块进行的。

方法

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

常见的一些HTTP方法

  • GET            获取服务器端资源
  • PUT           向服器发送资源,并且存到服务器里
  • DELETE     从服务器端删除一个资源
  • POST          将数据从客户端发送到服务器端,一般用于表单提交
  • HEAD         仅发送命令资源响应中的HTTP首部,即只获取服务器响应的首部

状态码

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

比如:200 OK 、404 not found 等

报文

HTTP报文是由一行一行的简单字符串组成的,HTTP报文都是纯文本,不是二进制代码。

从WEB客户端发往WEB服务器的HTTP报文称为请求报文(request message)。

从服务器发往客户端的报文称为响应报文(response message)

此外没有其它类型的HTTP报文。请求报文和响应报文的格式非常类似

HTTP报文包括以下三个部分

起始行:报文的第一行就是起始行,在请求报文中来说明要做些什么,在响应报文中说明出现了什么情况

首部字段:起始行后面有零个或多个道部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号来分隔。

主体:主体包括了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主题中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的。而主体则不同,主体中可以包含任意的二进制数据,当然,主体也可以包含文本。

 连接

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

TCP提供了

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

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

一个完整的HTTP请求及响应过程如下

  1. 浏览器从URL中解析出服务器的主机名
  2. 浏览器将服务器的主机名转换为服务器的IP地址(通过DNS)
  3. 浏览器将端口号从URL中解析出来
  4. 浏览器建立一条与WEB服务器的TCP连接
  5. 浏览器向服务器发送一条HTTP请求报文
  6. 服务器向浏览器回头一条HTTP响应报文
  7. 关闭连接,浏览器显示文档

协议版本

  • HTTP/0.9  HTTP的1991原型版称为HTTP/0.9。这个协议有很多严重的设计缺陷,只应该于老客户端交互,HTTP/0.9只支持GET方法,不支持多媒体内容的MIME类型,各种HTTP首部,或者版本号。
  • HTTP/1.0   1.0是第一个得到广泛应用的HTTP版本。HTTP/1.0添加了版本号、各种HTTP首部、一些额外的方法,以及对多某体对象的处理。
  • HTTP/1.0+  在20世纪90年代中叶,很多流行的web客户端和服务器都在飞快地向HTTP中添加各种特性,以满足快速扩张且在商业上十分成功的万维网的需要。其中很多特性,包括持久的keep-alive连接、虚拟主机支持以及代理连接支持都被加入到HTTPp这中,并成为非官方的事实标准。这种非正式的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是HTTP/1.1后继结构的原型建议,它重点关注的是性能的大幅优化,以及更强大的服务逻辑远程执行框架。HTTP-NG的研究工作终止于1998年。

 

 

  1 comment for “HTTP权威指南读书笔记(一)

  1. Pingback: writeaessay

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code