关于HTTP的知识,七七八八也了解过一些,总觉得很零散。
如果去翻看三卷本的TCP/IP的话,倒是大而全了,关键是,看得下去么?
某天看到有人推荐这么一本书《图解HTTP》,说浅显易懂而又不失风趣。翻了一下确实如此,于是来作个笔记。
1. 简介
目前主流的HTTP协议版本是1997年1月公布的1.1,最初的标准是RFC2068,之后发布了修订版RFC2616. 而新一代2.0正在制订中。
现在HTTP协议已经超出了web这个框架的局限,被运用到了各种场景里。
疑问:(是么?还有什么场景?)
2. 简单的HTTP协议
HTTP用于客户端和服务器端之间的通信,请求必定由客户端发出,服务器端回复响应。
请求报文包括:方法,uri,协议版本,请求首部字段,内容实体
响应报文包括:协议版本,状态码,用以解释状态码的原因短语,可选的响应首部字段以及实体主体
HTTP协议自身不具备保存之前发送过的请求或响应的功能,有了cookie再使用HTTP协议通信,就可以管理状态了。
请求URI的方式
-
URI为完整的请求URI
-
在首部字段host中写明网络域名或IP地址
如果是对服务器本身发起请求,可以用一个*来代替请求URI,如:OPTIONS * HTTP/1.1
告知服务器意图的HTTP方法
-
get 获取资源
-
post 传输实体主体
-
put 传输文件
鉴于HTTP 1.1的put方法自身不带验证机制,因此一般web网站不使用该方法。若配合web应用程序的验证机制,或架构设计采用REST标准的同类网站,就可能会开放使用put方法。
-
head 获得报文首部
-
delete 删除文件
和put一样不带验证机制。当配合web应用程序的验证机制,或遵守REST标准时还是有可能会开放使用的。
-
options 询问支持的方法
-
trace 追踪路径
-
connect 要求用隧道协议连接代理
持久连接
HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。
随着HTTP普及,文档中包含大量图片的情况变多,发送请求访问HTML页面资源的同时,也会请求该HTML页面里面包含的其他资源。这样,每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。
持久连接(HTTP Persistent Connections, 也称为HTTP keep-alive 或 HTTP connection reuse),特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。
在 HTTP 1.1 中,所有的链接默认都是持久连接。持久连接旨在建立1次TCP连接后进行多次请求和响应的交互。
管线化
持久连接使得多数请求以管线化 (pipellining) 方式发送成为可能。
管线化技术出现后,不用等待相应亦可直接发送下一个请求。这样就能做到同时并行发送多个请求,而不需要一个接一个地等待响应了。
使用cookie的状态管理
Cookie技术通过在请求和响应报文中写入 Cookie信息来控制客户端的状态。
Cookie会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie值后发送出去。
服务器端发现客户端发送过来的 Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
HTTP状态码
类别 原因短语
1xx 信息性状态码
2xx
3xx
4xx
5xx
经常使用的状态码大概有14种
HTTP首部字段类型
通用
请求
响应
实体
具体的字段和详细内容,用到的时候再查文档,太细的东西也不用背下来,用的时候拿来就好。
确保安全的HTTPS
tcpip是可能被窃听的网络
加密处理方法
通信的加密
内容的加密
HTTP+加密+认证+完整性保护=HTTPS
HTTPS是身批ssl外壳的HTTP
通信接口部分用ssl和tls协议代替
ssl是独立与HTTP的协议,是当今世界上应用最为广泛的网络安全技术
https采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
使用ca和其相关机关颁发的公开密钥证书。
要进行https通信,证书是必不可少的。
然后下面还介绍了几种证书,有需要的时候可以再翻书。
HTTPs的安全通信机制
web的攻击技术
这个可以稍微了解一下
(未完待续)