HTTP及HTTPS协议原理

2020-03-01  本文已影响0人  剑道_7ffc

http 通信协议的基本原理

一次 HTTP 请求的通信流程

客户端向DNS发送域名,DNS返回ip地址
客户端根据ip找到服务器,服务器返回HTML/JSON等格式的内容

HTTP 通信协议的组成

请求 URI 定位资源

1 通过URI找到资源的位置
2 http://www.baidu.com:80/java/index.html?name=john#head
schema://host[:port#]/path/.../?[url-params]#[ query-string]
scheme 指定应用层使用的协议(例如:http, https, ftp)
host HTTP 服务器的 IP 地址或者域名
port# HTTP 服务器的默认端口是 80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path 访问资源的路径
query-string 查询字符串
片段标识符(#)(使用片段标识符通常可标记出已获取资源中的子资源(文档内
的某个位置))

MIME Type

标识消息内容类型

文本文件:text/html,text/plain,text/css,application/xhtml+xml,application/xml
图片文件:image/jpeg,image/gif,image/png.
视频文件:video/mpeg,video/quicktime

Accept和Content-Type

Accept:客户端希望的消息内容类型
Content-Type:服务端实际返回的消息内容类型如代码resposne.setContentType(“application/json;charset=utf-8”)
若Accept和Content-Type内容不一致,则浏览器无法解析

如果用户访问一个不存在的地址呢?

状态码:描述请求处理结果


image.png

大家见得比较多的错误码:
200:一切正常
301:永久重定向
404:请求资源不存在
500:服务端内部错误

告诉服务器端当前请求的意图

浏览器定义了 8 种方法来表示对于不同请求的操作方式
GET:获取服务器的资源,一般用于查询操作,URL长度有限制,具体限制有浏览器决定。
POST:将实体传给服务端,让服务端保存,一般用于创建操作
PUT:向服务器发送数据,一般用于更新操作
DELETE:删除,一般用于删除操作
HEAD:获得报文首部
OPTIONS:询问支持的方法
TRACE:追踪路径
CONNECT:用隧道协议连接代理

http 协议的完整组成

请求报文

请求报文格式包含三个部分,(起始行、首部字段、主体)


image.png
响应报文

响应的报文格式也是一样,分为三部分


image.png

Http 协议中的扩展

如果传输的文件过大怎么办

1 对文件进行压缩,减少文件大小
首先服务端需要能支持文件的压缩功能,其次浏览器能够针对被压缩的文件进行解压缩。浏览器可以指定 Accept-Encoding 来高速服务器我当前支持的编码类型
Accept-Encoding:gzip,deflate;那服务端会根据支持的编码类型,选择合适的类型进行压缩。常见的编码方式有:gzip/deflate


image.png

2 分割传输
在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码

每次请求都要建立连接吗?

1 Http1.0的版本


image.png

2 Http1.1
持久连接:连接建立后,客户端或服务端没有明确提出断开连接,则tcp保持连接状态。通过Connection:Keep-Alive表示表示希望将此条连接作为持久连接。默认持久连接是开启的,通过在connection增加close头部来关闭连接,客户端或服务端仍然可以随时关闭空闲连接。
管道化连接:并行发送多个请求,而不需要一个接一个地等待响应


image.png

Http 协议的特点

Http 无状态协议

HTTP 协议:不会保存请求和响应之间的通信状态

如何实现带状态的协议呢?

通过服务端的session来保存状态,通过浏览器的cookie来传递sessionId


image.png

Tomcat 实现 session 的代码逻辑分析

将sessionId放在cookie内容里


image.png

Https 协议基本分析

https 安全传输协议

HTTPS和HTTP的区别:Https对传输内容进行加密,而Http则是明文传输。
通过在Http协议或TCP协议增加SSL层来实现的。
SSL(Secure Socket Layer,安全层)或者 TLS(Transport Layer Security) 安全层传输协议组合使用用于构造加密通道;


image.png

如何去建立一个安全的传输通道

加密的基础知识

对称加密

客户端和服务端拥有一个相同的秘钥S,客户端通过秘钥S对消息内容进行加密,服务端通过秘钥S进行解密


image.png
非对称加密

私钥加密且只有一个,属于服务端;公钥解密,输入客户端。


image.png
签名算法

用于验证是否发生修改如md5。

整体过程

使用非对称加密

主要解决秘钥泄密的问题,服务端将公钥发给每个客户端。

使用第三方机构

主要解决通过公钥的定位如是第三方机构的公钥还是中间人的公钥
1 第三方机构和服务端
服务端将公钥A发给第三方机构,第三方机构利用私钥对公钥A进行加密并返回给服务端即返回数字证书给服务端。


image.png

2 客户端和服务端
客户端向服务端发送请求公钥的的请求
服务端返回数字证书
客户端利用本地的第三方机构的公钥对数字证书进行解密,若解密成功则表示该数字证书来自于第三方机构。

第三方机构的公钥证书存哪里?

存在浏览器中,浏览器都会默认内置受信任的数据证书如谷歌浏览器的设置-->高级-->证书

证书编号

判断证书有没有被修改过。通过客户端和服务端的证书编号是否相同,证书编号生成规则:服务器内容+md5算法


image.png
image.png

HTTPS原理分析

image.png
上一篇下一篇

猜你喜欢

热点阅读