jd-smart-fe / shared

共享文档
MIT License
25 stars 4 forks source link

HTTP 扫盲 #14

Open ycshill opened 5 years ago

ycshill commented 5 years ago

前言

本篇博客是读完《图解HTTP》之后,摘录和总结其中个人感觉需要知道的知识点,因为这部分知识点比较枯燥乏味,所以本篇博客力求简单,明了,有趣。

  • WEB 及其网络的基础
  • 确保Web安全的HTTPS
  • 确认访问用户身份的认证
  • 基于HTTP追加协议

WEB 及其网络的基础

TCP/IP 分层管理

ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。 此处输入图片的描述

接下来的图,主要说明各个层的作用和各层涉及到协议: 此处输入图片的描述

常用协议:IP、TCP、DNS

IP协议(网路层)

TCP 协议(传输层)

TCP 协议是提供可靠的字节流服务;

TCP/IP 通信传输流

此处输入图片的描述

URL 和 URI 格式

URI 是统一资源标识符,而 URL 是统一资源定位符 此处输入图片的描述

web客户端访问资源的流程

此处输入图片的描述

HTTP协议简介

定义

HTTP-超文本传输协议,是位于计算机网络中的应用层,HTTP是建立在TCP协议之上,所以HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性,例如tcp建立连接的3次握手和断开连接的4次挥手以及每次建立连接带来的RTT延迟时间;

发展历史

HTTP 发展起来是因为在互联网的黎明时期,CERN(欧洲核子研究组织)的蒂姆.博纳斯-李 博士提出了一种让远隔两地的研究者们共享知识的设想。最初的设想的基本理念是:借助多文档之间互相关联行程超文本,连成互相参阅的WWW(万维网)。后来提出了三项技术:作为页面的文本标记语言-HTML(超文本标记语言);作为文档传输协议的-HTTP(超文本传输协议);指定文档所在地址的URL(统一资源定位符);

确保Web安全的HTTPS

HTTP的缺点

1. 通信使用明文(不加密),可能会被窃听

2. 不验证通信方的身份,可能遭到伪装

3. 无法证明报文的完整性,可能已遭篡改

HTTPS的诞生

由于 HTTP 的以上缺点,为了确保安全就诞生了HTTPS。简单的说 HTTPS = HTTP + 加密 + 认证 + 完整性保护。HTTPS并不是一种新的协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。例如,HTTP直接和TCP通信,使用了SSL时候,就会演变为先和SSL通信,再由SSL和TCP通信。 此处输入图片的描述

常用的加密技术

共享密钥加密/对称密钥加密

公开密钥加密/非对称加密

混合加密机制

数字签名和证书

数字签名

证书

总结

https的通信流程(阮大神的一篇博文):http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

确认访问用户身份的认证

何为认证

SSL 客户端认证

基于表单的认证

双因素认证

SSL客户端认证和表单认证结合,SSL客户端认证来认证客户端的计算机,而表单认证来确定用户本人的行为;

基于HTTP追加协议

HTTP 通信的瓶颈

追加的几种协议:

WebSocket

HTTP/2.0

支持HTTP2.0的条件

  1. 需要浏览器的支持,目前最新版的 Chrome、Opera、 FireFox、 IE11、 edge 都已经支持了;
  2. 需要 WEB 服务器的支持,比如 Nginx , H20; 如何浏览器或者服务器有一方不支持,就会自动变为HTTP/1.1

HTTP/2.0 改进点

HTTP/2.0 性能增强的核心:二进制分帧

在应用层和传输层之间增加了一个二进制分帧层,以达到“在不改动HTTP语义,HTTP方法、状态码、URI机及首部字段的情况下,突破HTTP/1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量”; 此处输入图片的描述

在二进制分帧层上,HTTP2.0 会将所有的信息分割为更小的消息和,并对它们采用二进制格式的编码,其中HTTP1.X 的首部信息会被封装到Headers帧,而request body则封装到Data帧里

HTTP2.0 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。每个数据流以消息的形式发送,而消息又是由一个或者多个组成,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装;

压缩头部

HTTP/2.0规定了在客户端和服务器端会使用并且维护「首部表」来跟踪和存储之前发送的键值对,对于相同的头部,不必再通过请求发送,只需发送一次

如果请求中不包含首部,那么首部的开销就是零字节,此时所有的首部都自动使用之前请求发送的首部;如果首部发变化了,那么只需要发送变化了数据在Headers帧里面,新增或者修改的首部帧会被追加到“首部表”。首部表在HTTP2.0连接存续4qi期内始终的存在,由客户端和服务器共同渐进地更新。

多路复用

HTTP2.0所有的通信都是在一个TCP连接上完成的。HTTP2.0 把 HTTP 协议通信的基本单位缩小为一个个的帧,这些帧对应着逻辑流中的消息。这些帧并行地同在一个TCP连接上双向交换消息。也就是说同一链接上有多个不同方向的数据流在传输。客户端可以一边乱序发送streams,也可以一边接收服务器的响应,而服务器端同理。

请求优先级

既然所有资源都是并行发送,那么就需要“优先级”的概念了,这样就可以对重要的文件进行先传输,加速页面的渲染。

服务器推送

在 HTTP2.0中,服务器推送是指客户端请求之前发送数据的机制。

强制 SSL

虽然 HTTP2.0 协议并没有声明一定要使用SSL,但是Google Chrome 等浏览器强制要使用 HTTP2.0 必须使用SSL。

zhixuanziben commented 5 years ago

sixsixsix!

yleo77 commented 5 years ago

学习学习