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 中,所有的连接默认是持久连接。

管线化

持久连接使管线化成为可能,不用等待上一个请求的响应即可发送下一个请求。

HTTP 是无状态协议,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。

所以引入 Cookie 技术,通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

HTTPS

HTTP 存在的问题:

  • 通信使用明文(不加密),内容可能会窃听
  • 不验证通信方的身份,因此可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

为了防止窃听,保护数据,可以使用SSL(Secure Socket Layer,安全套接字层)或TLS(Transport Layer Security,安全传输层协议)

HTTPS即在HTTP的基础上加上加密处理和认证以及完整性保护。

查明证书

SSL提供一种被称为证书的手段,用于确定通信方。

证书由值得信任的第三方机构颁发,用以证明服务器与客户端是实际存在的。客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。

HTTPS传输数据流程

  1. 首先客户端通过URL访问服务器建立SSL连接。
  2. 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
  3. 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
  5. 服务器利用自己的私钥解密出会话密钥。
  6. 服务器利用会话密钥加密与客户端之间的通信。

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

https://www.ituring.com.cn/book/1229

https://zhuanlan.zhihu.com/p/72616216


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

跨域 上一篇
node.js异步编程 下一篇