图解HTTP——阅读笔记
基础部分
第1章 了解Web及网络基础
重点了解HTTP协议在网络中的作用,扮演了什么角色,以及网络传输中相关的一些角色。
- 3项重要的web构建技术:HTML,URL,HTTP
- HTTP协议位于应用层,向下相关的分别是:应用层的DNS协议,负责通过域名查找IP地址;传输层的TCP协议,确保传输的可靠性,封装HTTP数据;网络层的IP协议,负责传输数据,封装TCP数据;
- URI标识某一互联网资源,URL标识资源的位置,URL是URI的子集;典型的URI如
ftp://ftp.is.co/rfc/rfc.txt
第2章 简单的HTTP协议
重点学习HTTP协议的结构,并基于此了解HTTP协议如何搞定通信问题的。
- 请求报文 = 请求方法 + 请求URI + 协议版本 + 可选的请求首部字段 + 内容实体
GET /index.html HTTP/1.1
HOST:hackr.jp
- 上面代码例子中的URI为:http://hackr.jp/index.html
- HTTP协议不保存状态,也就是说不记得之前的信息——使用cookie解决这个问题;
- Cookie由服务端生成,响应时传给客户端,客户端予以保存;在下一次请求时,若存有可用Cookie,则把Cookie信息带入;
- 使用方法对服务器下达命令/发送请求;注意GET是想要获得某个资源的,POST主要是想传输给服务器某些信息的——这个是本意,虽然实际有灵活应用
- 持久连接:建立一次TCP,持续不断的传输HTTP请求和响应,keep-alive
第3章 HTTP报文内的HTTP信息
略
第4章 返回结果的HTTP状态码
重点在于通过状态码快速确定请求结果。
- 数字 + 短语 = 状态
- 2XX:除了常见的200 OK 意外,204 No Content也是常见的,请求成功,但没有东西返回给你,此时关注204即可;
- 3XX:重定向,就是浏览器还需要做一些处理才能正确请求到URI;
- 4XX:客户端错误,400 Bad Request,请求本身有问题;401 Unauthorized,403 Forbidden,请求不对,被禁止了;404 NOT FOund ,请求不对导致未找到;
- 5XX:服务端错误,500 Internal Server Error,请求ok,执行请求时错误,有可能是服务端错误,也可能是在服务端的Web应用错误;503 Service Unalivable,服务器正忙
- 不少返回的状态码和实际情况对应不上,但用户不可察觉。。。
第5章 与HTTP协作的Web服务器
除了上述的传输过程,HTTP传输路上还可能碰到一些服务器“拦路虎”,了解下。
- 虚拟域名:多个域名指向同一个IP地址,需要请求时指明域名等信息;
- 代理服务器:目的是减少客户端对源服务器的访问,所以有缓存代理服务器,透明服务器等,用代理服务器,响应中往往有via
- 网关:为了安全,把HTTP请求转成其他协议传输;
- 隧道:同上,只不过用的是SSL加密,透明
第6章 HTTP首部
略,等需要的时候再去针对性的查。大致看过一遍,对报文能读懂7成。
第二部分 拓展
第7章 确保Web安全的HTTPS
HTTPS是什么?怎么实现的安全?
- HTTP安全短板:简便带来的安全问题:明文数据通信,不验证通信方身份,无验证报文完整性;
- HTTPS针对上述短板,即:HTTPS = HTTP + 加密 + 认证 + 完整性保护;或者 HTTPS = HTTP + SSL(SSL和TSL,TSL也是SSL发展过来的)
- SSL使用不对称密钥加密技术,也称公开密钥加密技术,核心思路就是公钥加密,私钥解密,具体流程引自百度
公开密钥加密的过程是:
假设两个用户A,B进行通信,A先发送信息给B,然后B发送信息给A
- B先产生一对密钥k1a和k1b,前者用来加密,后者用来解密
- B把密钥k1a发送给A;(因为k1a只能用来加密,截获方无法通过它来解密并读取密文)
- A用密钥k1a加密一条信息,使之变成密文c1;
- A把密文c1发送给B;
- B用密钥k1b解密,并读取解密后的信息;
- A产生一对密钥k2a和k2b,前者用来加密,后者用来解密
- A把密钥k2a发送给B;
- B用密钥k2a加密一条信息,使之变成密文c2;
- B把密文c2发送给A;
- A用密钥k2b解密,并读取解密后的信息;
- 钥匙一般和证书绑定,用以验证密钥的合法性;
- 自行搭建的OPENSSL一般不被浏览器所认可;
- SSL缺点:
SSL证书需要钱。功能越强大的证书费用越高。个人网站、小网站没有必要一般不会用。
SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名。IPv4资源不可能支撑这个消耗。(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持。WindowsXP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用。)
HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用。流量成本太高。
HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本。如果全部采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去。
HTTPS协议握手阶段比较费时,对网站的相应速度有负面影响。如非必要,没有理由牺牲用户体验。
最关键的,SSL证书的信用链体系并不安全。特别是在某些国家(咳咳,你们懂的)可以控制CA根证书的情况下,中间人攻击一样可行。
第8章 确认访问用户身份的认证
如何确认客户端的身份呢?主要有四种认证方式。
- BASIC:base64编码交换用户名和密码的认证方式,安全等级较低,用的较少;
- DIGEST:类似握手,服务端会发送质询码(base64)过来,发送过去的信息用MD5加密;
- SSL客户端认证:客户端证书,一般采用客户端证书+密码双重认证,前者认证客户端合法性,后者认证客户操作;客户端证书一般由服务端颁发,比如银行的U盾;缺点就是成本高;
- FORM:表单认证,一般的用户名密码——认证一般基于表单验证
第9章 基于HTTP的功能追加协议
第10章 构建Web内容的技术
第11章 Web的攻击技术
放一起说吧;
都是比较了解化的东西,只是说明HTTP还算是功能强大、方便好用,但是缺点不少。
- WebSocket可以了解一下:WebSocket 是什么原理?为什么可以实现持久连接?