HTTP 与 HTTPS协议
TCP/IP 五层模型
TCP/IP五层模型分为物理层,数据链路层,网络层,传输层,应用层。
HTTP、DNS、FTP协议为应用层协议
TCP、UDP为数据链路层协议
IP为网络层协议
URI 与 URL
URI(统一资源标识符)用字符串标识某一互联网资源,HTTP协议使用URI定位互联网资源
URL(统一资源定位符)表示资源的地点,为URI的子集
HTTP 协议
超文本传输协议(Hyper Text Transfer Protocol)
基于TCP/IP通信协议,用于客户端与服务端之间的通信
特点
- 支持客户/服务器模式
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
- 不保存状态:HTTP为无状态协议,自身不对请求和相应之间的通信状态进行保存
HTTP 报文
HTTP报文大致可分为报文首部和报文主体两部分
请求端(客户端)的报文称为请求报文,响应端(服务器端)的报文称为响应报文
请求报文构成:
- 请求行:包含请求的方法,请求URI和HTTP版本
- 请求头:包含请求首部字段和其他通用首部字段
- 请求正文
响应报文构成:
- 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
- 响应头:包含响应首部字段和其他通用首部字段
- 响应正文
请求方法
- GET:请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据
- POST:用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用.
- HEAD:请求一个与GET请求的响应相同的响应,但没有响应体
- PUT:用来传输文件
- DELETE:请求服务器删除指定的资源
- CONNECT:建立一个到由目标资源标识的服务器的隧道
- OPTIONS:用于查询针对请求URI指定的资源支持的方法
- TRACE:沿着到目标资源的路径执行一个消息环回测试
- PATCH:用于对资源应用部分修改
状态码
状态码分类
- 1XX - 信息,服务器收到请求,需要请求者继续操作。
- 2XX - 成功,请求成功收到,理解并处理。
- 3XX - 重定向,需要进一步的操作以完成请求。
- 4XX - 客户端错误,请求包含语法错误或无法完成请求。
- 5XX - 服务器错误,服务器在处理请求的过程中发生了错误。
常见状态码
- 200 OK - 客户端请求成功
- 301 - 永久性重定向 资源(网页等)被永久转移到其它URL
- 302 - 临时重定向 资源的URI以临时定位到其他位置
- 400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized - 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
- 404 - 请求资源不存在,可能是输入了错误的URL
- 500 - 服务器内部发生了不可预期的错误
- 503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
持久连接
HTTP 协议初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接,当需要获取大量图片等资源时,每次请求都会造成无畏的 TCP 连接建立和断开,增加通信量的开销。
为了解决这个问题,提出了持久链接(HTTP keep-alive)的方法:只要任意一端没有明确的提出断开连接,则保持 TCP 连接状态。在 HTTP1.1 中,所有的连接默认是持久连接。
管线化
持久连接使管线化成为可能,不用等待上一个请求的响应即可发送下一个请求。
Cookie
HTTP 是无状态协议,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。
所以引入 Cookie 技术,通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
HTTPS
HTTP 存在的问题:
- 通信使用明文(不加密),内容可能会窃听
- 不验证通信方的身份,因此可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
为了防止窃听,保护数据,可以使用SSL(Secure Socket Layer,安全套接字层)或TLS(Transport Layer Security,安全传输层协议)
HTTPS即在HTTP的基础上加上加密处理和认证以及完整性保护。
查明证书
SSL提供一种被称为证书的手段,用于确定通信方。
证书由值得信任的第三方机构颁发,用以证明服务器与客户端是实际存在的。客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。
HTTPS传输数据流程
- 首先客户端通过URL访问服务器建立SSL连接。
- 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- 服务器利用自己的私钥解密出会话密钥。
- 服务器利用会话密钥加密与客户端之间的通信。
HTTPS的缺点
- HTTPS协议多次握手,导致页面的加载时间延长近50%;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
- 申请SSL证书需要钱,功能越强大的证书费用越高。
- SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
总结HTTPS和HTTP的区别
- HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理。
- http和https使用连接方式不同,默认端口也不一样,http是80,https是443。
链接
https://zh.wikipedia.org/wiki/Category:HTTP
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!