Android开发经验谈程序员

《图解HTTP》读书笔记

2018-09-27  本文已影响6人  Jinwong

1. TCP/IP分层

TCP/IP协议族分为四层:应用层、传输层、网络层和数据链路层。OSI模型将网络通信分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
发送端的客户端在应用层(HTTP协议)发送一个想看到某个Web页面的Http请求。在传输层(TCP协议)把应用层处接收到的数据(HTTP请求报文)进行分割,并将各个报文打上标记序号及端口号后转发给网络层。在网络层(IP协议),增加作为通信目的地的MAC 地址后转发给链路层,直至发送到接收端服务器。接收端服务器接收到数据,按序往上层发送,一直到应用层。

发送端在层与层传输数据时,每经过一层必定打上一个该层所属的首部信息,例如http首部,TCP 首部,ip首部,以太网首部。接收端在层与层传输数据时,每经过一层会将对应的首部消掉。

IP 地址指明了节点被分配的地址,MAC 地址是指网卡所属固定的地址。IP地址可以与MAC 地址进行配对。IP 地址可变换,但是MAC 地址基本上不会更改

使用ARP协议凭借MAC地址进行通信。

2. TCP 三次握手

为准确无误的将数据送达目标处,TCP 协议采用三次握手策略。握手过程使用TCP标志(flag)-SYN(synchronize)和ACK(acknowledgement)。发送端首先发送一个带有SYN标志的数据包给对方。接收到后回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送端再回传一个带有ACK标志的数据包,代表“握手”结束。

3. URI

URI(统一资源标识符)用字符串标识某一互联网资源,而
URL(统一资源定位符)表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。

4. HTTP报文

  1. 请求报文是有请求方法、请求URL、协议版本、可选的请求首部字段 和内容实体构成。
  2. 响应报文是有协议版本号、状态码、状态码原因短语、可选的响应首部字段以及实体主体构成。
  3. Http 是一种不保存状态的协议,可通过cookie实现状态管理
  4. HTTP 报文不一定有报文主体,例如HEAD 方法返回的报文。
  5. HTTP 报文本身是有多行(CR+LF作为换行符)数据构成的字符串文本。 可以分为报文首部,及报文主体

5. 提高HTTP 效率

HTTP协议初始版本中,每进行一次HTTP通信就要断开一次TCP连接,协议后来提高效率方式有

  1. 持久连接,减少TCP重复建立和断开所造成的额外开销,减少服务器负载,提高响应效率。
  2. 管线化。HTTP 初始版本,发送请求需等待并受到响应,才能发送下个请求。管线化后可不用等待,可同时并发多个请求。

HTTP/1.1 所以连接默认都是持久连接。但在HTTP/1.0内并未标准化。

6. 状态码

7、 首部

  1. 当首部重复,目前规范尚未明确,不同浏览器处理逻辑各部相同。
  2. 客户端请求首部包含Cache-Control:no-cache,则表明客户端将不会接受缓存过的响应,于是中间的缓存服务器必须将客户端请求转发给源服务器。
  3. 客户端请求头包含max-age指令,如果判定缓存资源缓存时间数比指定数值更小,那么客户端就接受缓存资源。当指定max-age为0,那么缓存服务器通常需要将请求转发给源服务器。
  4. HTTP/1.1版本缓存服务器遇到Expires首部及max-age指令,会忽略掉Expires首部,而HTTP/1.0版本相反,max-age指令会被忽略掉。
  5. HTTP/1.1版本默认是持久连接。当服务器想明确断开连接时,则指定Connction 首部字段值为Close。而之前HTTP协议版本默认都是非持久化连接。如果希望在旧版本HTTP协议维持持久化连接,则指定Connecton首部字段值为Keep-Alive.
  6. 首部字段Upgrade 用于升级协议版本。使用首部Upgrade时,还需要额外指定Connection:Upgrade。
  7. 首部字段Host会告知服务器,请求资源所处的互联网主机名和端口号。Host是HTTP/1.1规范中唯一一个必须被包含在请求内的首部字段。Host 在单台服务器,分配多个域名虚拟主机。用 来明确指出请求主机名。

8. Cookie

  1. 服务器通过Set-Cookie首部控制cookie,包含NAME=VALUE、expires=DATE、path=PATH、domain=域名、Secure、HttpOnly
  2. 当省略expires属性,其Cookie有效期及限于维持浏览器会话(Session)时间段内。这通常限于浏览器应用被关闭之前。
  3. 添加secure属性用于限制Web页面仅在Https安全连接时,才可以发送Cookie.
  4. HttpOnly属性使Cookie不能被JavaScript脚本访问,主要目的为防止跨站脚本攻击(XSS)对Cookie信息的窃取。
  5. 一旦Cookie 从服务器发送给客户端,服务端就不存在可以显示删除Cookie的方法,但是可以通过覆盖已过期Cookie,实现对客户端Cookie实质性删除操作。

9. HTTP缺点

10.HTTPS

11. HTTPS 缺点

12. HTTPs 为啥能安全通信

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密

13. HTTPS 通信过程

  1. 客户端通过发送CLient Hello 报文开始SSL 通信,报文中包含客户端支持的SSL版本、加密算法、支持压缩方法、生成随机数。
  2. 服务器可进行SSL通信时,会以Server Hello报文作为应答。在报文中确认通信SSL协议、加密方法 及生成的随机数,稍后用于生成"对话密钥"
  3. 之后服务器发送Cerficate报文,报文包含公开密钥证书
  4. 最后服务器发送Server Hello Done 报文通知客户端,最初SSL 握手协商部分结束
  5. 客户端收到证书后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信,客户端以Client Key Exchange报文作为回应,报文中包含通信加密中使用的Pre-master secret 随机密钥串。
  6. 客户端继续发送Change Cipher Spec报文。提示服务,在此报文之后通信会采用Pre-master secret 密钥加密
  7. 客户端发送Finished 报文。报文包含连接至今全部报文的全体校验值。这次握手协商是否能成功,要以服务器是否能够正确解密该报文作为判断标准
  8. 服务器同样发送Change Cipher Spec 报文
  9. 服务器同样发送Finished 报文
  10. SSL 连接建立完成,通信受SSL保护,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

14. 浏览器验证证书

15. HTTPS 升级操作

16. session 管理及认证过程

17. HTTP 标准缺点

18. SPDY

19. Websocket

20. 网络攻击

上一篇 下一篇

猜你喜欢

热点阅读