《http权威指南》学习笔记
Web基础
资源
web服务器是web资源的宿主,不仅包括静态文件,还包括根据需要生成内容的软件程序。
MIME(Multipurpose Internet Mail Extension)类型
多用途因特网邮件扩展,是为了解决在不同电子邮件系统之间搬移报文时存在的问题。MIME原本在邮件系统中工作得非常好,HTTP采用了它,用于描述并标记多媒体内容。
MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分割。
- HTML格式的文本文档由text/html类型来标记
- 普通的ASCII文本文档由text/plain类型来标记
- JPEG版本的图片为image/jpeg类型
- GIF版本的图片为image/gif类型
- Apple的QuickTime电影为video/quicktime类型
- 微软的PowerPoint演示文件为application/vnd.ms-powerpoint类型
常见的MIME类型有数百个,可以查表。
URI(Uniform Resource Identifier)统一资源标识符
URI就好比因特网的邮政地址一样,URI有两种形式,分别称为URL和URN。
URL
URL(Uniform Resource Locator)统一资源定位符
主要分三部分
- 协议类型(http://)
- 网址(www.nimei.com)
- Web服务器上的某个资源(/2huo/niniubi.gif)
URN
URN(uniform resource name)统一资源名,目前还处于试验阶段,尚未大范围使用。故通常意义的URI是指URL
事务
http事务是由一条http请求和http响应组成。
方法
- GET,取得资源
- PUT,修改资源
- DELETE,删除资源
- POST,将客户端数据发送到一个服务器网关应用程序,可以在header或者body中添加数据。
- HEAD,仅发送资源响应中的HTTP首部
状态码
每条HTTP响应报文返回时都会携带一个状态码。
HTTP报文
包含三个部分
- 起始行,在请求报文中用来书名要做什么,在响应报文中说明出现了什么情况。
- 首部字段,起始行后有0个或者多个首部字段,每个首部字段包含一个键和一个值。
- 主体,包含任意的二进制数据,也可以包含文本。
连接
报文构建后,需要传输,用TCP/IP协议
TCP/IP
HTTP是应用层协议,无需关系细节,细节交给TCP/IP协议。TCP提供了
- 无差错的数据传输
- 按序传输(数据总是会按照发送的顺序达到)
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
连接、IP地址及端口号
HTTP客户端向服务器发送报文之前,需要用网际协议(IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
一般情况下,都是通过IP:端口确定网址,但是为了人类方便,使用主机名代替IP,然后通过DNS来解析主机名,HTTP端口如果没写,默认是80。
步骤如下
- 浏览器从URL中解析出服务器的主机名
- 浏览器将服务器的主机名转换成服务器的IP地址
- 浏览器将端口号从URL中解析出来
- 浏览器建立一条与web服务器的TCP连接
- 浏览器向服务器发送一条HTTP请求报文
- 服务器向浏览器回送一条HTTP响应报文
- 关闭连接,浏览器显示文档
协议版本
- HTTP/0.9
1991年原型版,只支持GET方法,不支持多媒体内容的MIME类型、各种http首部、版本号
- HTTP/1.0
添加了版本号、各种http首部、一些额外的方法,以及对多媒体对象的处理。
- HTTP/1.0+
添加了一些特性,比如:持久的keep-alive连接,虚拟主机支持,以及代理连接支持
- HTTP/1.1
重点关注的是校正http设计中的 结构性缺陷,明确语义,引入重要的性能优化措施,删除了一些不好的特性。当前用的就是HTTP/1.1
- HTTP-NG(HTTP/2.0)
重点关注的是性能的大幅优化,以及更强大的服务逻辑远程执行框架。1998年就研究完了,没有要取代1.1的意思。
web的结构组件
代理
位于客户端和服务器间的http中间实体。接收客户端的http请求,转发给服务器(可能会对请求进行修改之后转发),代表用户访问服务器,代理可以对请求和响应进行过滤。
缓存
HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。提高性能,节约带宽。
网关
连接其他应用程序的特殊web服务器。通常用于将http流量转换成其他的协议,比如ftp协议。
隧道
对http通信报文进行盲转发的特殊代理。建立隧道之后,就会在两条连接之间对原始数据进行盲转发的http应用程序,转发时不会窥探数据。常见用途:通过http连接承载加密的安全套接字层(SSL)流量,这样整个请求和响应都是加密状态的,比较安全。
Agent代理
发起自动http请求的半智能web客户端。