《HTTP权威指南》学习笔记(一)
第一部分 HTTP:Web的基础(描述Web的基础构件与HTTP的核心技术)
第1章 HTTP概述
内容:
1.服务器和客户端;
2.资源;
3.事务;
4.报文;
第1章 HTTP概述
内容:
1.服务器和客户端;
2.资源;
3.事务;
4.报文;
HTTP报文包括三个部分:
起始行:报文的第一行,在请求报文中用来说明要做什么,在响应报文中说明出现了什么情况。
首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为便于解析,两者间用冒号(:)分隔,以一个空行结束
主体:空行之后就是可选的报文主体,其中包含所有类型的数据。请求主体中包括了要发送给web服务器的数据;
起始行:报文的第一行,在请求报文中用来说明要做什么,在响应报文中说明出现了什么情况。
首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为便于解析,两者间用冒号(:)分隔,以一个空行结束
主体:空行之后就是可选的报文主体,其中包含所有类型的数据。请求主体中包括了要发送给web服务器的数据;
响应主体中装载了要返回给客户端的数据。
5.连接;
浏览器连接处理:
a) 浏览器从URL中解析出服务器的主机名;
b) 浏览器将服务器的主机名转换成服务器的IP地址;
c) 浏览器将端口号从URL中解析出来;
d) 浏览器建立一条与Web服务器的TCP连接;
e) 浏览器向服务器发送一条HTTP请求报文;
f) 服务器向浏览器回送一条HTTP响应报文;
g) 关闭连接,浏览器显示文档。
6.协议;
7.web组件;
代理、缓存、网关、隧道、Agent代理
8.其他。
第2章 URL与资源
内容:
1.URL的组成
2.URL的字符及编码
URL分以下三部分:
第一部分(http):URL方案。告知web客户端怎样访问资源。
第二部分(www.ifeng.com):服务器的位置。告知web客户端资源位于何处。
第三部分(/news/index.html):资源路径。路径说明了请求的是服务器上哪个特定的本地资源。
例子:http://www.ifeng.com/news/index.html
图1 URL的组成
通用URL组件:
通用URL组件(由9部分构成的通用格式):<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
方案; 用户; 密码; 主机; 端口; 路径; 参数; 查询; 片段。
URL最重要的三个部分是:方案、主机、路径
第3章 HTTP报文
内容:
1.报文的组成及细节
报文的组成:HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。
报文由三个部分组成:起始行(start line)==>对报文进行描述;
首部(header)==>包含属性的部分;
主体(body)==>可选的,包含数据的部分;
注:此处可以类比BMP图像的数据组成;
HTTP报文的类型:请求报文(request message)、响应报文(response message)。
请求报文回向Web服务器请求一个动作,响应报文会将请求的结果返回给客户端。
请求报文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
<method> ==>方法:客户端希望服务器对资源执行的动作。比如:GET、POST、HEAD等;
<request-URL> ==>请求地址:命名了所请求的资源,或者URL路径组件的完整URL。
<version> ==>版本:报文所使用的HTTP版本[ 例子:HTTP/<主要版本号>.<次要版本号> ]。
<headers> ==>首部:可以有零个或多个首部,每个首部都包含一个名字,后面跟一个冒号(:),然后是一个可选的空格,
第3章 HTTP报文
内容:
1.报文的组成及细节
报文的组成:HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。
报文由三个部分组成:起始行(start line)==>对报文进行描述;
首部(header)==>包含属性的部分;
主体(body)==>可选的,包含数据的部分;
图2 HTTP报文格式
注:此处可以类比BMP图像的数据组成;
图3 HTTP事务过程
HTTP报文的类型:请求报文(request message)、响应报文(response message)。
请求报文回向Web服务器请求一个动作,响应报文会将请求的结果返回给客户端。
图4 请求报文、响应报文的格式
请求报文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
<method> ==>方法:客户端希望服务器对资源执行的动作。比如:GET、POST、HEAD等;
<request-URL> ==>请求地址:命名了所请求的资源,或者URL路径组件的完整URL。
<version> ==>版本:报文所使用的HTTP版本[ 例子:HTTP/<主要版本号>.<次要版本号> ]。
<headers> ==>首部:可以有零个或多个首部,每个首部都包含一个名字,后面跟一个冒号(:),然后是一个可选的空格,
接着是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示首部列表的结束和
实体主体部分的开始。
<entity-body> ==>实体的主体部分:包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。
响应报文的格式:
<version> <status> <reason-phrase>
<headers>
<entity-body>
<status> ==>状态码:用三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别。
<reason-phrase> ==>原因短语:数字状态码的可读版本,包含行终止序列之前的所有文本。
第4章 连接管理
内容:
1. HTTP连接的下层保障TCP连接,TCP的性能;
2. HTTP连接的处理及提高HTTP性能的方法;
3. HTTP连接的关闭;
<entity-body> ==>实体的主体部分:包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。
响应报文的格式:
<version> <status> <reason-phrase>
<headers>
<entity-body>
<status> ==>状态码:用三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别。
<reason-phrase> ==>原因短语:数字状态码的可读版本,包含行终止序列之前的所有文本。
第4章 连接管理
内容:
1. HTTP连接的下层保障TCP连接,TCP的性能;
2. HTTP连接的处理及提高HTTP性能的方法;
3. HTTP连接的关闭;
扩展阅读及思考
注: