一篇文章让你了解http的前生后世

前言

这篇文章是关于我在看完《图解http》之后总结的一篇文章。文章主要是关于http协议的特点及从http到HTTPS的一个过渡,希望能够对你有所帮助。文章要点:http的特点、http的缺点、HTTPS的概念、SSL安全机制等等。

http的诞生:

在1989年那会儿,互联网还只属于少数人;为了方便这些人之间的通信,人们设计了一种拥有发布和接收HTML页面的方法,这就是http协议的原型。从这之后,在互联网工程人物小组(IETF)的组织和研究下发布了一系列关于http协议的RFC文档,这就成为了当代http协议的原型和基础。

http的基础:

http协议是一个应用层的协议,它能完成工作是基于TCP/IP四层体系架构的,下图是我整理总结的四层架构。

 

TCP/IP通信数据传输结构示意图:

 

一次http请求发生的过程

 

扫描二维码关注公众号,回复: 2467717 查看本文章

 

URI和URL之间的关系:

URI(Uniform Resource Identifier):统一资源标识符,表示互联网上某一资源。

URL:同一资源定位符,表示资源的地点(互联网上所处的位置)。

从上述来看,URL是URI的子集。

 

http协议的特点:

  1. http协议用于客户端和服务器端的通信。
  2. 客户端和服务器端通过请求和响应的交换达成通信。(通信是客户端开始建立的,服务器在没有收到请求之前是不会发送响应的。)
  3. http是不保存状态的协议。(也就是说http协议对于发送过的请求和响应不做持久化处理),但是时代再进步,用户的需求也在不断提升,需要保持一些状态,因此出现了cookie、session、等技术
  4. http请求使用URI来定位资源。(因为URI的特性,所以互联网上的所有资源都可以被http请求访问到)
  5. http协议中的方法。
Get

获取资源

  • 一般用于查询信息
  • 使用URL传递参数,参数都显示在URL中
  • 对所发送的信息量有限制,一般在2000个字符
Post

传输文件实体

  • 场景:密码、敏感性文字、数据量大
  • 一般用于新建、修改、删除服务器上的资源
  • 对所发送的信息量无限制
Put 用来传输文件。没有验证机制,存在安全性问题。
Head 获得URI所指定资源的报文头部,跟get一样,只是不返回报文主体部分。
Delete 删除URI所指定的资源。
Options 询问当前URI指定的资源支持的方法。
Trace 追踪http请求的通信路径。
Connect 要去用隧道协议连接代理

 

  1. 使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存在以下不足

  1. 通信时使用明文(不加密),内容可能会被窃听。
  2. 不验证通信双方的身份,因此可能遭遇伪装。
  3. 无法证明报文的完整性,所以有可能收到的报文已被恶意篡改。

 

既然使用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有了更好的理解,也是对我之前的学习做一个总结吧。

猜你喜欢

转载自blog.csdn.net/kangxidagege/article/details/81172716