文章目录

  • 1、HTTP协议
    • 1.1、HTTP 简介
    • 1.2、HTTP 消息结构
    • 1.3、HTTP 请求方法
    • 1.4、HTTP 响应头信息
    • 1.5、HTTP 状态码
    • 1.6、HTTP协议的优点与缺点
  • 2、SSL
    • 2.1、SSL简介
    • 2.2、SSL提供服务
    • 2.3、SSL的体系结构
  • 3、HTTPS
    • 3.1、HTTPS简介
    • 3.2、HTTPS协议采用的加密技术
    • 3.3、HTTPS的安全通信机制
    • 3.4、HTTPS的证书机制
    • 3.5、关于客户端证书
    • 3.6、为什么还有很多网站不使用Https

1、HTTP协议

1.1、HTTP 简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

HTTP 工作原理

  • HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送所有请求
  • Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等
  • Web服务器根据接收到的请求后,向客户端发送响应信息
  • HTTP默认端口号为80,也可以改为8080或者其他端口

HTTP注意事项:

  • HTTP是无连接的 :无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
  • HTTP是媒体独立的 :这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型
  • HTTP是无状态的 :HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

以下图表展示了HTTP协议通信流程:

1.2、HTTP 消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP请求的目的。

一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接

一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成

下图给出了请求报文的一般格式

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

实例

下面实例是一典型的使用GET来传递数据的实例:

客户端请求:

GET /hello.txt HTTP/1.1User-Agent: curl/7.16.3
libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host:
www.example.comAccept-Language: en, mi

服务端响应:

HTTP/1.1 200 OKDate: Mon, 27 Jul 2009 12:28:53
GMTServer: ApacheLast-Modified: Wed, 22 Jul 2009
19:15:56 GMTETag: "34aa387-d-1568eb00"Accept-
Ranges: bytesContent-Length: 51Vary: Accept-
EncodingContent-Type: text/plain

输出结果:

Hello World! My payload includes a trailing CRLF.

1.3、HTTP 请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

1.4、HTTP 响应头信息

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息

应答头 说明
Allow 服务器支持哪些请求方法(如GET、POST等)
Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压 缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的 Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
Content-Length 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过 byteArrayStream.writeTo(response.getOutputStream()发送内容。
Date 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦
Expires 应该在什么时候认为文档已经过期,从而不再缓存它?
Last-Modified 文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件 GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
Location 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader(“Refresh”, “5; URL=http://host/path”)让浏览器读取指定的页面。注 意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV=“Refresh” CONTENT=“5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的 HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。注意Refresh的意义是"N秒之后刷 新本页面或访问指定页面”,而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可 以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV=“Refresh” …>。注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
Server 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置
Set-Cookie 设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的 应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\“executives\””)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)

1.5、HTTP 状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code。

下面是常见的HTTP状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

HTTP状态码分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型

1.6、HTTP协议的优点与缺点

HTTP协议的优点

  • 效率高

限制每个连接只有一个请求的无连接状态,在服务器处理完客户的请求,并收到客户的反应,即断开,通过这种方式可以节省传输时间

  • 简单快速

当服务器客户端请求服务时,只需传送请求方法和路径。请求方法常用的GET,HEAD,POST。每种方法规定了客户端与服务器联系的是不同的类型。因为简单的 HTTP 协议,通信速度很快

  • 灵活

HTTP 允许任何类型的数据对象的传输,输入被传输的内容类型进行标记

  • 无状态

HTTP 协议是无状态的协议,没有一个国家是没有协议的事务处理和存储能力。如果该状态是指由于缺乏必要前述信息的后续处理中,它必须被重传,这可能导致在数据传输增加了每个连接。另一方面,当不需要在服务器上的快速响应的先验信息

HTTP协议的缺点

有被窃听的风险,HTTP通信使用明文,传输过程中没有任何的保证措施,可能会被窃听

在传输过程中,不验证通信方的身份,这中间就有可能被遭遇伪装

HTTP只是对报文进行了解析,并没有对其进行完整的校验,所以无法验证报文的完整性,可能被遭篡改

2、SSL

2.1、SSL简介

SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密

2.2、SSL提供服务

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器
  • 加密数据以防止数据中途被窃取
  • 维护数据的完整性,确保数据在传输过程中不被改变

2.3、SSL的体系结构

SSL的体系结构中包含两个协议子层

  • 底层是SSL记录协议层(SSL Record Protocol Layer)
  • 高层是SSL握手协议层(SSL HandShake Protocol Layer)

SSL的协议栈如图所示,其中阴影部分即SSL协议

SSL记录协议层的作用是为高层协议提供基本的安全服务

SSL记录协议针对HTTP协议进行了特别的设计,使得超文本的传输协议HTTP能够在SSL运行

记录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作

SSL握手协议层包括

  • SSL握手协议(SSL HandShake Protocol)
  • SSL密码参数修改协议(SSL Change Cipher Spec Protocol)
  • 应用数据协议(Application Data Protocol)
  • SSL警告协议(SSL Alert Protocol)

握手层的这些协议用于SSL管理信息的交换,允许应用协议传送数据之间相互验证,协商加密算法和生成密钥等

SSL握手协议的作用是协调客户和服务器的状态,使双方能够达到状态的同步

3、HTTPS

3.1、HTTPS简介

  • HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道
  • 在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性
  • HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL
  • HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)
  • 这个系统提供了身份验证与加密通讯方法
  • 它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

HTTPS的通信端口由SSL和TSL代替了,它是一种应用层协议

一般情况下HTTP直接和TCP进行通信,当使用了SSL之后,就会变成先和SSL通信,SSL再和TCP进行通信,原理图如下:

当采用了SSL协议之后,HTTP协议就具备了加密、证书、完整性保护三大功能,SSL是独立于HTTP存在的,是现存的广泛使用的网络安全技术

3.2、HTTPS协议采用的加密技术

SSL采用的加密技术叫做 “共享密钥加密”,也叫作 “对称密钥加密”

比如客户端向服务器发送一条信息,首先客户端会采用已知的算法对信息进行加密,比如MD5或者Base64加密,接收端对加密的信息进行解密的时候需要用到密钥,中间会传递密钥,(加密和解密的密钥是同一个),密钥在传输中间是被加密的。

这种方式看起来安全,但是仍有潜在的危险,一旦被窃听,或者信息被挟持,就有可能破解密钥,而破解其中的信息。因此“共享密钥加密”这种方式存在安全隐患


非对称密钥加密

“非对称加密”使用的时候有两把锁,一把叫做“私有密钥”,一把是“公开密钥”

使用非对称加密的加密方式,服务器首先告诉客户端按照自己给定的公开密钥进行加密处理,客户端按照公开密钥加密以后,服务器接受到信息再通过自己的私有密钥进行解密,这样做的好处就是解密的钥匙根本就不会进行传输,因此也就避免了被挟持的风险。就算公开密钥被窃听者拿到了,它也很难进行解密,因为解密过程是对离散对数求值,这可不是轻而易举就能做到的事

3.3、HTTPS的安全通信机制

非称加密方式的缺点

公开密钥加密固然比共享密钥加密的方式提升了一个档次,但是它也存在两个问题:

如何保证接收端向发送端发出公开秘钥的时候,发送端确保收到的是预先要发送的,而不会被挟持。只要是发送密钥,就有可能有被挟持的风险

非对称加密的方式效率比较低,它处理起来更为复杂,通信过程中使用就有一定的效率问题而影响通信速度

HTTPS采用混合机制的加密方式

HTTPS则综合了公开密钥加密和共享密钥加密的两种方式,充分利用两者的优势,在最初连接的时候使用非对称密钥的加密方式保证连接的安全性,之后稳定的通讯采用对称加密的方式
稳定的通讯是指确保交换的密钥是安全的

3.4、HTTPS的证书机制

非对称加密的缺点,其中第一个就是公钥很可能存在被挟持的情况,无法保证客户端收到的公开密钥就是服务器发行的公开密钥。此时就引出了公开密钥证书机制

数字证书认证机构是客户端与服务器都可信赖的第三方机构。证书的具体传播过程如下:

服务器的开发者携带公开密钥,向数字证书认证机构提出公开密钥的申请,数字证书认证机构在认清申请者的身份,审核通过以后,会对开发者申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将密钥放在证书里面,绑定在一起

服务器将这份数字证书发送给客户端,因为客户端也认可证书机构,客户端可以通过数字证书中的数字签名来验证公钥的真伪,来确保服务器传过来的公开密钥是真实的。一般情况下,证书的数字签名是很难被伪造的,这取决于认证机构的公信力。一旦确认信息无误之后,客户端就会通过公钥对报文进行加密发送,服务器接收到以后用自己的私钥进行解密。

3.5、关于客户端证书

客户端证书是进行客户端认证的,证明服务器正在通信的客户端是安全的。但是使用客户端证书使用存在以下几个问题:

使用客户端证书,客户得自己安装证书,客户端证书是需要进行付费购买的,且每张证书对应到用户意味着需要支付用户数量对等的费用,这给用户带来了间接的问题

客户端证书存在另一个问题是,客户端证书只能证明客户端的存在,而不能证明用户本人的真实有效

3.6、为什么还有很多网站不使用Https

Https既然如此安全可靠,为什么还有很多WEB网站不使用Https的协议?这其中的原因有以下几点:

加密通信会消耗一定的cpu和服务器资源,如果每次通信都加密,就会消耗更多的资源

如果所有的信息都采用HTTPS加密,这无疑是一种浪费。非敏感信息就算被窃取了,也无伤大雅。可以在其传输敏感信息的时候,采用HTTPS协议进行加密

购买证书的开销也是一笔很大的费用。向认证机构购买证书,证书价格会根据不同的认证机构略有不同,而一般的授权需要折合人民币600多元。

【参考链接1】
【参考链接2-Https协议简介】
【百度百科-HTTPS】

HTTP协议SSL协议HTTPS协议相关推荐

  1. tomcat 将http协议改为https协议,Websocket请求ws协议修改为wss协议

    tomcat 将http协议改为https协议,Websocket请求ws协议修改为wss协议 一. 说明 WS协议和WSS协议两个均是WebSocket协议的SCHEM,两者一个是非安全的,一个是安 ...

  2. 谷歌浏览器安全证书不受信任_使用SSL证书https协议,完美解决谷歌Chrome浏览器“不安全”...

    传统的http协议,存在被监听.劫持等安全风险,故众多浏览器都已经http协议标记为"不安全".尤其是谷歌Chrome浏览器对"不安全"的提示最为明显,360浏 ...

  3. 免费申请下载SSL证书与证书的安装部署教程,网站服务由网站由http协议升级为https协议

    文章目录 相关技术术语 SSL SSL证书 HTTPS 证书申请 证书安装 在Tomcat服务器安装SSL证书 示例使用 阿里云SSL证书服务 相关技术术语 SSL 安全套接层SSL(Secure S ...

  4. Django云服务器配置Nginx站点SSL证书HTTPS协议

    如果自己已经能独立使用 Python 的 Django 框架完成一个项目了,现在需要进行部署服务以及相关项目分发的二级域名了.不过至于什么是 http 和 https 这里不做科普,不懂的请找度娘. ...

  5. Windows IIS 环境部署 .NET Core 语言文件 SSL证书 HTTPS协议

    Azure 应用服务和 IIS 上 ASP.NET Core 的常见错误参考 .NET Core 应用程序发布概述[发布独立应用] .NET Core 应用程序发布概述[发布依赖于运行时的应用] Do ...

  6. 给服务器弄了一个https协议,HTTP和HTTPS协议

    一.http和https的区别 1.http协议存在的问题 1)请求信息明文传输,容易被窃听截取. 2)数据的完整性未校验,容易被篡改 3)没有验证对方身份,存在冒充危险 2.https相对http协 ...

  7. 11.网络协议-HTTP及HTTPS协议

    1.HTTP需求背景 万维网(www) • Http是一种网络协议,也是互联网上应用最为广泛的一种,http也叫超文本传输协议,所有的html文件都是遵循这个标准进行传输的. • HTTP的出现是为了 ...

  8. 【基础协议】HTTP/HTTPS协议及其工作流程

    目录 1 HTTP协议与HTTPS协议 1.1 HTTP协议概述 1.2 HTTPS协议概述 1.3 HTTPS与HHTP区别 2 URI和URL相关知识 2.1 URI统一资源标识符 2.2 URL ...

  9. 云套件将http协议改为https协议

    作者:yangjl 最近很多使用云套件的小伙伴们想把http协议改为https的,但是目前imanager for k8s里面目前并未提供一键转换的功能,目前研发侧的同事正在完善此功能,争取尽快更新出 ...

  10. Nginx 配置 SSL 及 HTTPS 协议通信过程

    一.前言 基础知识 1.1 公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分,公钥.私钥.加密解密算法,它的加密解密过程如下: 加密:通过加密算法和公钥对内容( ...

最新文章

  1. 软件开发环境-按应用范围分类
  2. Codeforces Round #160 (Div. 2) B - Roma and Changing Signs
  3. 数据仓库中两种数据模型的分析比较
  4. mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换
  5. zookeeper专题:使用zookeeper客户端实现动态监听节点并获取数据
  6. [Web Chart系列之二] 各种实现js 图表的library汇总与比较
  7. selenium配置
  8. axure产品原型图,元件库导入方法
  9. 用系统工具sxstrace检查缺少的VC运行时组件
  10. 变异记录文件格式 vcf
  11. 创建一个 C++ 控制台应用程序项目
  12. DW——验证注册页面 设计JavaScript
  13. 第十届全国大学生光电设计大赛分析前瞻(一文看懂光电设计大赛创意赛,做好准备)
  14. 微信模板消息html,微信推送模板消息,偶发出现报错errcode
  15. 磁力聚合搜索工具中文版magnetW 3.1.1
  16. 心理学与生活 -人格与动机
  17. 能否被2整除引发的思考
  18. 采用云原生架构:架构演进和成熟度
  19. ubuntu20.04 屏幕共享打不开
  20. CUMT2022网络攻防考试

热门文章

  1. 数据中心液体冷却技术的“机架经济学”
  2. GB50174-2017新旧对比
  3. oracle 信用检查,Oracle EBS 信用(Credit)额度(1)-基础设置
  4. Paper:《A Few Useful Things to Know About Machine Learning—关于机器学习的一些有用的知识》翻译与解读
  5. Algorithm:【Algorithm算法进阶之路】之算法中的数学编程相关习题(时间速度、进制转换、排列组合、条件概率、斐波那契数列)
  6. Go:go语言的认识理解、安装应用、语法使用之详细攻略
  7. wrf_input文件解析(PART1)未完
  8. Python之日志处理(logging模块)
  9. P2730 魔板 Magic Squares (搜索)
  10. 霍金:AI或许能根除疾病和贫穷,但也可能摧毁人类 | GMIC 2017