前言
这篇文章是关于我在看完《图解http》之后总结的一篇文章。文章主要是关于http协议的特点及从http到HTTPS的一个过渡,希望能够对你有所帮助。文章要点:http的特点、http的缺点、HTTPS的概念、SSL安全机制等等。
http的诞生:
在1989年那会儿,互联网还只属于少数人;为了方便这些人之间的通信,人们设计了一种拥有发布和接收HTML页面的方法,这就是http协议的原型。从这之后,在互联网工程人物小组(IETF)的组织和研究下发布了一系列关于http协议的RFC文档,这就成为了当代http协议的原型和基础。
http的基础:
http协议是一个应用层的协议,它能完成工作是基于TCP/IP四层体系架构的,下图是我整理总结的四层架构。
TCP/IP通信数据传输结构示意图:
一次http请求发生的过程
URI和URL之间的关系:
URI(Uniform Resource Identifier):统一资源标识符,表示互联网上某一资源。
URL:同一资源定位符,表示资源的地点(互联网上所处的位置)。
从上述来看,URL是URI的子集。
http协议的特点:
- http协议用于客户端和服务器端的通信。
- 客户端和服务器端通过请求和响应的交换达成通信。(通信是客户端开始建立的,服务器在没有收到请求之前是不会发送响应的。)
- http是不保存状态的协议。(也就是说http协议对于发送过的请求和响应不做持久化处理),但是时代再进步,用户的需求也在不断提升,需要保持一些状态,因此出现了cookie、session、等技术
- http请求使用URI来定位资源。(因为URI的特性,所以互联网上的所有资源都可以被http请求访问到)
- http协议中的方法。
Get | 获取资源
|
Post | 传输文件实体
|
Put | 用来传输文件。没有验证机制,存在安全性问题。 |
Head | 获得URI所指定资源的报文头部,跟get一样,只是不返回报文主体部分。 |
Delete | 删除URI所指定的资源。 |
Options | 询问当前URI指定的资源支持的方法。 |
Trace | 追踪http请求的通信路径。 |
Connect | 要去用隧道协议连接代理 |
- 使http协议实现持久化的技术
Cookie技术
使用cookie持久化技术后,则使得http请求以管线化方式发送成为可能。管线化即可实现让多个http请求以并行方式发送,而不必等待响应才可发送请求。
http报文结构:
请求行:包含用于请求的方法,请求URI和http版本。
状态行:表明响应结果的状态码,原因短语和http版本。
首部行:包含请求和响应的各种条件和属性的各类首部(通用首部、请求首部、响应首部、实体首部)。
状态码的类别:
因为这里是概述性的总结,所以在此只列举常见的几种状态码,详情请查看该链接:https://blog.csdn.net/GarfieldEr007/article/details/77984065
200 OK | 表示从客户端发送的请求在服务器端被正常处理了。 |
204 No Content | 请求处理成功,但是没有资源实体返回,返回的响应报文中不包含实体部分。 |
301 Move Permanently | 永久性重定向:资源的URI已经更新,需要更新你请求的URI。 |
302 Found | 临时性重定向;资源的URI暂时更新,本次按照当前的URI返回,不需要更新当前请求URI。 |
303 See Other | 资源重定向,当前资源中有另外一个URI,按照这个URI重新请求资源。 |
304 Not Modified | 未修改, 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 |
400 Bad Request | 请求错误, 请求报文存在语法错误,服务器理解不了该请求。 |
401 Unauthorized | 未经授权的,表示发送的请求需要经过认证才能返回请求资源。 |
403 Forbidden | 禁止访问,表示请求资源被服务器进制访问。 |
404 Not Found | 未找到,表示服务器上没有请求的资源。 |
500 Internal Server Error | 服务器内部处理出错。 |
503 Service Unavailable | 服务不可用,表明服务器暂时处于超负载状况或者停机维护状况。 |
与http协作的web服务器
1、http协议允许在一台http服务器上搭建多个web站点:使用虚拟主机的功能可以让一台物理机实现多台服务器,可以运行不同的网站。
2、http协议通信数据的转发程序(代理、网关、隧道)
代理:
网关:
隧道:
从http到HTTPS
为什么要推出HTTPS呢,这是因为http存在以下不足:
- 通信时使用明文(不加密),内容可能会被窃听。
- 不验证通信双方的身份,因此可能遭遇伪装。
- 无法证明报文的完整性,所以有可能收到的报文已被恶意篡改。
既然使用http通信不安全,那么我们需要找到一种安全的通信方式,这就是https:
HTTPS = http + SSL(加密 + 认证 + 完整性保护)
加密:加密是对内容的加密,示意图如下:
这种方式是对报文内容的加密,由于该方式不同于SSL或TLS将整个通信线路做加密处理,所以内容仍有被篡改的可能。
验证:http协议中的请求和响应不会对通信方进行确认。任何人都可以发送请求给服务器,服务器对请求也是来者不拒。但是这种机制存在以下几点隐患:
完整性保护:
http协议无法验证收发报文的完整性,报文可能在网络传输中被中间人给篡改。
SSL的加密体制:
通过SSL加密机制现在已经解决了http的明文传输问题和验证通信方问题,剩余的数据完整性问题是通过数据报文摘要(MAC)解决的。
报文摘要(Message Authentication Code): MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
SSL体制:要理解完整的SSL体制对我来说有点复杂,因此这里我不做过多叙述,下图是我从书上截取的一张完整的SSL流程图。
http和HTTPS之间的优缺点:
http | HTTPS | |
安全性 | 不安全 | 安全 |
通信速度 | 快 | 慢 |
CPU消耗 | 低 | 高 |
我们可以发现HTTPS解决了http的不足之处,但是又引入了新的问题,如因为对通信数据的加解密,验证等安全操作导致了通信的速度降低等问题(https的网络负载是http的2~100倍)。
小结:
本篇文章分析了http协议的特点及从http到HTTPS的过渡,通过这种分析使得我对http有了更好的理解,也是对我之前的学习做一个总结吧。