HTTP与HTTPs区别 ----Notes

虚拟主机

HTTP 1.1 使用虚拟主机技术,使得一台服务器拥有多个域名,并且在逻辑上可以看成多个服务器。



HTTP有以下安全问题:

  1. 使用明文进行通信,内容可能被窃听;
  2. 不验证通信方的身份,通信方的身份有可能遭遇伪装;
  3. 无法证明报文的完整性,报文有可能遭篡改;

HTTPs并不是新协议,而是让HTTP先和SSL通信,再由SSL和TCP通信,也就是说HTTPs使用了隧道进行通信。

通过使用SSL,HTTPs具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

HTTPs采用混合加密机制,使用非对称密钥加密用于传输对称密钥(Session key即对称密钥) 来保证传输过程的安全性,之后使用对称加密密钥加密进行通信 来保证通信过程的效率

HTTPs 通过使用证书来对通信方进行认证。


完整性保护

SSL 提供报文摘要功能来进行完整性保护。

HTTP也提供了 MD5报文摘要功能,但不是安全的。
例如,报文内容被篡改之后,同时重新计算MD5值,通信接收方是无法意识到发生了篡改。

HTTPs的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。
试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。


HTTPs的缺点

  1. 因为需要进行加密解密等过程,因此速度更慢
  2. 需要支付证书授权的高额费用




HTTP 1.x 缺陷

HTTP 1.x 实现简单是以牺牲性能为代价的:

  • 客户端需要使用多个连接才能实现并发和缩短延迟;
  • 不会压缩请求和响应首部,从而导致不必要的网络流量;
  • 不支持有效的资源优先级,致使底层TCP连接的利用率低下。




HTTP 2.0的特性


1. 二进制分层帧


HTTP 2.0 将报文分成 HEADERS帧 和 DATA帧,它们都是二进制格式的。

在通信过程中,只会有一个TCP连接存在,它承载了任意数量的双向数据流(Stream)。

  • 每一个数据流(Stream)都有一个唯一标识符可选的优先级信息,用于承载双向信息
  • 消息(Message)是 与逻辑请求和响应对应的完整的一系列帧。
  • (Frame)是最小的通信单位, 来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。


2. 服务器端推送


HTTP 2.0 客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求。
例如,client 请求一个page.html, 那么Sever 会把 script.js 和 style.css等与之相关的资源一起发送给client。



3. 首部压缩


HTTP 1.1 的首部带有大量信息,而且每次发送都要重复发送。
HTTP 2.0 要去client 和 sever 同时维护 和 更新一个包含之前见过的首部字段表,从而避免了重复传输。

除此之外,HTTP 2.0 还使用了哈夫曼编码对首部字段进行压缩。





GET 和 POST 的比较


1. 作用:

GET: 用于获取资源;
POST:用于传输实体主体。

2. 参数

GET 和 POST 的请求都能使用额外的参数。
但是,GET的参数是以查询字符串出现在URL中;
POST的参数存储在实体主体中。
但不能因为POST参数存储在实体主体中就认为它更安全,因为照样可以用抓包工具对其进行抓包。

因为URL 只支持ASCII码,因此GET的参数中如果含有中文等字符,需要先进行编码; 而POST参考支持标准字符集。

3. 安全

安全的HTTP方法不会改变服务器状态,也就是说是只可读的。

GET方法是安全的,而POST不是。
因为POST的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

安全的方法 : GET、HEAD、OPTIONS;
不安全的方法: POST、PUT、DELETE。】


4. 幂等性

幂等的HTTP方法,同样的请求被执行一次与执行多次的效果是一样的,服务器状态也是一样的。 也就是说,幂等方法不应该有副作用(统计用途除外)。

所有的安全的方法,都是幂等的

在正确实现的条件下,GET、HEAD、PUT 和 DELETE 等方法都是幂等的, 而 POST方法不是幂等的


5. 可缓存

如果要对响应进行缓存,需要满足以下条件:

  • 请求报文的HTTP方法本身是可缓存的,包括GET 和 HEAD,但是 PUT 和 DELETE 不可缓存, POST在多数情况下不可缓存;
  • 响应报文的状态码是可缓存的,包括: 200,203,204,206,300,301,404,405,410,414,501;
  • 响应报文的Cache-Control 首部字段没有指定不进行缓存。


XMLHTTPRequest

先介绍XMLHTTPRequest:
XMLHTTPRequest是一个API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过URL来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。
  • 在使用XMLHTTPRequest的POST方法时,浏览器会先发送Header再发送Data。 但并不是所有浏览器都会这样做,例如:Firefox就不会。
  • GET方法 Header 和 Data会一起发送





HTTP 1.0 与 HTTP 1.1 的区别


  1. HTTP 1.1 默认是支持长连接;
  2. HTTP 1.1 支持管线化处理;
  3. HTTP 1.1 支持同时打开多个TCP连接;
  4. HTTP 1.1 支持虚拟主机;
  5. HTTP 1.1 新增状态码 100
  6. HTTP 1.1 支持分块传输编码
  7. HTTP 1.1 新增缓存处理指令 max-age

你可能感兴趣的:(Notes)