http和https协议
http 与 https
http和https
HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。
HTTP之所以会被HTTPS取代,最重要的原因,就是不安全。为什么不安全?
-- 按传输层 TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。
-- 而HTTP 在传输数据的过程中,所有的数据都是明文传输,非常奔放,自然没有安全性可言。数据在公网上传输,容易被第三方获取,尤其特别是一些敏感数据,比如用户密码和信用卡信息等,一旦被第三方获取,后果不堪设想。
HTTPS 主要用于解决数据安全传输的问题,通过加密套件,让数据在网络传输过程中对第三方“不可见”(看见的是无意义的乱码信息)。
在 HTTPS 中,原有的 HTTP 协议会得到 TLS (安全传输层协议) 或其前辈 SSL (安全套接层) 的加密。
因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL。
#也就是说 HTTPS = HTTP + SSL / TLS。
https数据传输过程
- 首先客户端向服务端发起TCP请求建立连接(就是三次握手)
- 握手成功后才会开始发起http或https请求
- 自身服务器上一般都会有一个公钥A、私钥B和证书
- 客户端(浏览器)像google、百度等都会有一个证书链(CA机构颁发的合法的)
- 客户端访问:https://google.com/ (输入:“什么是证书链”)的请求时候、google服务器会将自身的证书和公钥发给客户端验证
- 如果证书不在客户端的证书链中、网页就会返回不安全提示
- 如果证书合法、客户端将会使用服务端给的公钥A来生成一个随机码key、并使用公钥A将key加密、再将加密的key和数据发给服务端
-服务端:当服务端接收到客户端送过来的key后、使用私钥B对key进行解密、解密后拿出请求的数据(“什么是证书链”)
- 将其请求的结果用随机码key进行加密、再发送回给客户端、客户端再使用key进行解密取出请求的结果
- 如下图:
http与https的区别
http的特点
#HTTP特点:
-- http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
-- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
-- 灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
-- 无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session。
-- 无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。
#HTTP报文组成
请求报文构成:
-- 请求行:包括请求方法、URL、协议/版本
-- 请求头(Request Header)
-- 请求正文
响应报文构成
-- 状态行
-- 响应头
-- 响应正文
常见请求方法
GET:请求指定的页面信息,并返回实体主体。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE:请求服务器删除指定的页面
post和get的区别:
都包含请求头请求行,post多了请求body。
get多用来查询,请求参数放在url中,不会对服务器上的内容产生作用。post用来提交,如把账号密码放入body中。
GET是直接添加到URL后面的,直接就可以在URL中看到内容,而POST是放在报文内部的,用户无法直接看到。
GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有
URI和URL的区别
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
URI:Uniform Resource Identifier 统一资源标识符
URL:Uniform Resource Location 统一资源定位符
URI 是用来标示 一个具体的资源的,我们可以通过 URI 知道一个资源是什么。
URL 则是用来定位具体的资源的,标示了一个具体的资源位置。互联网上的每个文件都有一个唯一的URL。