记录
http版本号差异
1.0 1.1 2.0
三次握手过程非对称加密
HTTP
一 概述
HTTP(HyperText Transfer Protocol)超文本传输协议 ,基于TCP/IP通信协议来传输数据.是网络分层中的应用层(应用程序)协议
默认端口为 : 80
二 http的特点
- http是无状态的,指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,在正常请求并接收数据之后不会记录任何信息.
- http是无连接的,每次链接只处理一个请求,当处理完客户端请求,并受到客户端应答之后就会断开连接节省传输时间
- http允许传输任意类型的数据对象.正在传输的数据类型有Content-Type 进行标记
由于信息是明文传输,所以被认为是不安全的,所以产生了HTTPS
HTTP的协议格式
传输协议图
URL结构
HTTP常见Header
Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
get和post请求的区别
HTTP状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
200 | OK | 请求成功.一般用于GET与POST请求 |
301 | Moved Permanently | 永久移动.请求的资源已经被永久的移动到新URL,返回的信息会包括新的URL,浏览器会自动对象到新的URL,今后任何新的请求都应使用新的URL进行代替 |
302 | Found | 临时移动.与301类似.但是资源只是被临时移动,客户应该继续使用原有的URL |
307 | Temporary Redirect 临时重定向,与302累死,使用GET请求重定向 | |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
HTTP三次握手的过程
要确认建立一个HTTP链接需要进行三次TCP握手进行确认建立一个HTTP链接.
- 第一次握手 : 客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers) ,syn = j ,客户端进入SYUN_SEND(发送) 状态等待服务器确认
- 第二次握手 : 服务器接受客户端的syn包并确认(ack = j+1),同时向客户端发送一个syn(syn = k),即发送了 SYN + ACK 包,此时服务器进入SYN_RECV(接受)状态
- 第三次握手 : 客户端收到服务器的SYN + ACK 包,想服务器发送确认包ACK(ack = k+1) ,这个包发送完毕,客户端和服务器进入ESTABLISHED(建立)状态,完成握手
然后就可以进行发送数据包了
HTTPS
HTTPS 的全称是HTPP over SSL,也就是通过SSL/TLS加密HTTP数据.
HTTPS出现的原因
因为http的数据都是明文传输的,为了防止数据密码,或者敏感信息被第三方获取,所以很多银行或者电子邮箱安全级别较高的服务都会采用https协议
前置知识
要了解HTTPS的安全性首先要立了解一些前置知识
-
对称加密算法 : 双方发送的信息使用一个密钥进行加密解密
为了防止第三方C监听A和B的网络数据,或者拦截数据,进行伪造之后再发给A或者B,进而欺骗A和B.
为了应对这种事情的发生,A和B对自己的数据进行了加密.并使用一个公用的密钥.在发送数据和受到数据的时候,使用这个密钥可以进行加密和解密.
但是这个方法有个问题就是一单密钥也被拦截或者破解.那么双方的数据安全就不能得到保障. -
非对称加密算法 : 因为时代发展,服务器要和很多客户端进行通信,不能和每一个人都商量一个加密密钥
所以非对称加密算法就被提出,每一方都拥有两个密钥,一个为public key(公钥)一个叫做private key(密钥).
A和B都有一个public key和一个private key 在发送数据前,A和B建立链接的过程中都会得知上访的public key
例如A和B在相互发送数据的时候,- 首先A使用A自己的private key加密数据的hash值,然后在使用B的public key加密数据.之后A将加密的hash值和使用B的public key加密过后的数据和其他必要信息发送给B.
- B收到之后,先用自己的private key 解密数据,在本地运算这个数据的hash值,将两个hash值进行对比,从而验证数据的完整性.
- B发送数据流程与A相似
实际使用
非对称加密算法比对称加密算法要复杂的多,所以处理起来也会效率更低.所以在实际使用的情况下,非对称加密只会用来传递 用于加密的密钥.当用于加密的密钥确定,A和B还是用过对称加密的算法进行网络通信.这样既保证了安全性也不会影响效率
现在进行一次安全的HTTPS通信,需要经过以下几个步骤
- 通过CA体系交换public key
- 通过非对称加密算法,用于交换对称加密的密钥
- 通过对称加密算法,加密正常的网络通信
HTTPS建立通信的过程
- 客户端发送一个HTTPS请求(包括自己支持的加密算法和随机生成的一个随机数1等信息),链接到服务器的443端口
- 服务端返回第一个相应报文,内容为从中客户端发送过来的加密算法中挑选出一组加密算法,服务端生成的一个随机数2,第二个报文以证书的形式发回给浏览器.证书中包括网站地址,加密公钥public key,以及证书的颁发机构等信息.
- 当客户端获得网站证书之后就会做以下工作
- 首先验证证书的合法性 : 例如公匙是否有效,证书的颁发机构,过期时间.在浏览器安装的时候就已经内置了全球顶级的CA机构证书.可以验证服务端证书是否合法
- 如果证书是可以信任的,或者用户自己选择接受不受信的证书.客户端也会生成一个**随机数3(预主密匙)**密码,
- 使用随机数1,随机数2,随机数3(预主密钥)三者组装成接下来加密使用的会话秘钥,首先将会话秘钥进行计算hash值,接着使用证书中服务端提供的公钥将会话秘钥进行加密.最后将生成的hash值和会话秘钥发送回服务端
- 服务端接受发来的数据后
- 使用自己的私钥将信息解密取出会话秘钥,使用密码解密客户端发送过来的随机数1,随机数2,随机数3(预主密钥),并验证hash值是否和客户端发来的一致如果相同,就组装成下来会话用的会话秘钥.(现在客户端和服务端都拥有了三个随机数和会话秘钥)
- 计算信息的hash值,并使用这个会话密钥加密一段信息,将hash值和加密后的信息发送给浏览器
- 如果客户端使用会话密钥进行解密并计算消息的hash值.并与服务器发送过来的hash值一致.此时握手过程就结束了,表明SSL层的链接结束了,之后所有通信数据,都会由客户端生成的随机密码并使用对称加密算法进行加密.