http和https

目录

一、http

1、什么是http?

2、http1.1

3、HTTP/2 协议

4、http/3

5、http的缺点

6、什么是http无协议状态缓存,怎么解决?

7、简单讲解一下http2的多路复用

8、http请求的options方法有什么作用?

9、http请求过程?

二、https

1、https是什么?

2、https的加密过程

TLS 握手过程

实现原理

3、http和https的区别


一、http

1、什么是http?

答:http是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传输层协议,保证了数据传输的可靠性。(通俗理解:tcp是个梯子,http就是利用梯子来搬运货物)

​ HTTP 是一个无状态的协议,HTTP 服务器不会保存关于客户的任何信息。

​ HTTP 有两种连接模式,一种是持续连接,一种非持续连接。非持续连接指的是服务器必须为每一个请求对象建立和维护 一个全新的连接。而持续连接下,TCP 连接默认不关闭,可以被多个请求复用。采用持续连接的好处是可以避免每次建立 TCP 连接三次握手时所花费的时间。在 HTTP1.0 以前使用的非持续的连接,但是可以在请求时,加上 Connection: keep-alive 来要求服务器不要关闭 TCP 连接。HTTP1.1 以后默认采用的是持续的连接。目前对于同一个域,大多数浏览器支持同时建立 6 个持久连接。

HTTP请求包括什么部分(请求头,请求数据,请求行,空格)

1.请求报文(请求行/请求头/请求数据/空行)
    1)请求行:请求方法字段、URL字段和HTTP协议版本,例如:GET /index.html HTTP/1.1,get方法将数据拼接在url后面,传递参数受限
        请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
    2)请求头(key value形式)
        User-Agent:产生请求的浏览器类型。
        Accept:客户端可识别的内容类型列表。
        Host:主机地址
    3)请求数据:post方法中,会把数据以key value形式发送请求
    4)空行:发送回车符和换行符,通知服务器以下不再有请求头
2.响应报文(状态行、消息报头、响应正文)
    状态行:http版本 + 状态码 +状态代码的文本描述
    消息报头:包含服务器类型,日期,长度,内容类型等
    响应正文:服务器返回的HTML页面或者json数据

首部可以分为四种首部,请求首部、响应首部、通用首部和实体首部。通用首部和实体首部在请求报文和响应报文中都可以设置,区别在于请求首部和响应首部。

1)请求首部有 Accept 可接收媒体资源的类型、Accept-Charset 可接收的字符集、Host 请求的主机名。
2)响应首部有 ETag 资源的匹配信息,Location 客户端重定向的 URI。
3)通用首部有 Cache-Control 控制缓存策略、Connection 管理持久连接。
4)常见的实体首部有 Content-Length 实体主体的大小、Expires 实体主体的过期时间、Last-Modified 资源的最后修改时间。

2、http1.1

​ HTTP/1.1 默认使用了持续连接,多个请求可以复用同一个 TCP 连接,但是在同一个 TCP 连接里面,数据请求的通信次序是固定的。服务器只有处理完一个请求的响应后,才会进行下一个请求的处理,如果前面请求的响应特别慢的话,就会造成许多请求排队等待的情况,这种情况被称为“队头堵塞”。队头阻塞会导致持续连接在达到最大数量时,剩余的资源需要等待其他资源请求完成后才能发起请求。

​ 为了避免这个问题,一个是减少请求数,一个是同时打开多个持久连接。这就是我们对网站优化时,使用雪碧图、合并脚本的 原因。

3、HTTP/2 协议

​ 2009 年,谷歌公开了自行研发的 SPDY 协议,主要解决 HTTP/1.1 效率不高的问题。这个协议在 Chrome 浏览器上证明 可行以后,就被当作 HTTP2.0 的基础,主要特性都在 HTTP2.0 之中得到继承。2015 年,HTTP/2 发布。

HTTP2.0 主要有以下新的特性:

  • 二进制协议

HTTP2.0 是一个二进制协议。在 HTTP/1.1 版中,报文的头信息必须是文本(ASCII 编码),数据体可以是文本,也可以是 二进制。 HTTP2.0 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧",可以分为头信息帧和数据帧。 帧的概念是它实现多路复用的基础。

  • 多路复用

HTTP2.0 实现了多路复用, HTTP2.0 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了"队头堵塞"的问题。

  • 数据流

​ HTTP2.0 使用了数据流的概念,因为 HTTP2.0 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。 HTTP2.0 将每个请求或回应的所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流 ID ,用来区分它属于哪个数据流。

  • 服务器推送

​ HTTP2.0 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送。使用服务器推送,提前给客户端推送必要的资源 ,这样就可以相对减少一些延迟时间。这里需要注意的是 HTTP2.0 下服务器主动推送的是静态资源,和 WebSocket 以及使用 SSE 等方式向客户端发送即时数据的推送是不同的。

HTTP2.0 协议缺点

​ 因为 HTTP2.0 使用了多路复用,一般来说同一域名下只需要使用一个 TCP 连接。由于多个数据流使用同一个 TCP 连接,遵守同一个流量状态控制和拥塞控制。只要一个数据流遭遇到堵塞,剩下的数据流就没法发出去,这样就导致了后面的所有数据都会被阻塞。 HTTP2.0 出现的这个问题是由于其使用 TCP 协议的问题,与它本身的实现其实并没有多大关系。

4、http/3

由于 TCP 本身存在的一些限制,Google 就开发了一个基于 UDP 协议的 QUIC 协议,并且使用在了 HTTP/3 上。 QUIC 协议在 UDP 协议上实现了多路复用、有序交付、重传等等功能

http1.0、http1.1和http2.0的区别?

http1.1相比http1.0

  1. http1.0采用的是非持续链接,而http1.1默认采用持续链接。http1.1 通过使用持久连接来使多个 http 请求复用同一个 TCP 连接,以此来避免使用非持续连接时每次需要建立连接的时延。
  2. http1.0不支持host头部,http1.1支持,可以实现虚拟主机
  3. http1.1新增了24个错误状态码,如409便是请求资源与资源的当前状态发生冲突。
  4. http1.1 相对于 http1.0 还新增了很多方法,如 PUT、HEAD、OPTIONS 等。
  5. http1.1新增了E-tag、cache-control等用于缓存控制的头部

http2.0相比http1.1

  1. http2.0采用二进制格式传输,http1.1采用文本格式传输
  2. HTTP2.0 实现了多路复用,HTTP2.0 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了"队头堵塞"的问题。
  3. HTTP2.0允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送。服务端可以预测客户端需要的资源,并主动推送给客户端。
  4. HTTP2.0实现了报文头部的压缩。由于 HTTP 1.1 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 Cookie 和 User Agent ,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。
  5. HTTP2.0 使用了数据流的概念,因为 HTTP2.0 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。 HTTP2.0 将每个请求或回应的所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流 ID ,用来区分它属于哪个数据流。

5、http的缺点

http的报文是明文传输的,内容容易被监听,而且无法检验报文的安全性,也就是说数据可能会被篡改,另外通信双方没有身份验证的机制,通信双方可能被伪冒。

6、什么是http无协议状态缓存,怎么解决?

1、当客户端发送一次http请求之后,客户端再发送一次http请求,http并不知道当前用户是一个老用户。

2、解决办法:可以使用cookie解决无状态问题,cookie相当于一个通行证,第一次访问的时候给客户端发送一个cookie,当客户端再次来时,拿着cookie,那么服务器就知道是老用户了。

7、简单讲解一下http2的多路复用

在 HTTP/1 中,每次请求都会建立一次HTTP连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,即使开启了 Keep-Alive ,解决了多次连接的问题,但是依然有两个效率上的问题:

  • 第一个:串行的文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。(注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输)
  • 第二个:连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。

HTTP/2的多路复用就是为了解决上述的两个性能问题。 在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。 帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。 多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。

8、http请求的options方法有什么作用?

答:OPTIONS用于查询相应URL支持的HTTP方法,(该方法会用“*”来代替资源名称),向服务器发送options请求,可以测试服务器的功能是否正常。

js的XMLHttpRequest对象进行CORS跨域资源共享时,对于复杂请求,就是使用options方法发送嗅探请求,来判断是否有指定资源的访问权限和判断请求来源是否安全。

9、http请求过程?

答:浏览器中的 HTTP 请求从发起到结束一共经历了如下八个阶段:构建请求、查找缓存、准备 IP 和端口、等待 TCP 队列、建立 TCP 连接、发起 HTTP 请求、服务器处理请求、服务器返回请求和断开连接。

二、https

1、https是什么?

​ 由于http存在不足,出现了https协议,https协议是在http的基础上加了一个安全套接层。

​ HTTPS 指的是超文本传输安全协议,HTTPS 是基于 HTTP 协议的,不过它会使用 TLS/SSL 来对数据加密。使用 TLS/ SSL 协议,所有的信息都是加密的,第三方没有办法窃听。并且它提供了一种校验机制,信息一旦被篡改,通信的双方会立刻发现。它还配备了身份证书,防止身份被冒充的情况出现。

2、https的加密过程

TLS 握手过程

  1. 第一步,客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法。
  2. 第二步,服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数。
  3. 第三步,客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,然后发给服务器。并且还会提供一个前面所有内容的 hash 的值,用来供服务器检验。
  4. 第四步,服务器使用自己的私钥,来解密客户端发送过来的随机数。并提供前面所有内容的 hash 值来供客户端检验。
  5. 第五步,客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成对话秘钥,以后的对话过程都使用这个秘钥来加密信息。

实现原理

TLS 的握手过程主要用到了三个方法来保证传输的安全。

首先是对称加密的方法,对称加密的方法是,双方使用同一个秘钥对数据进行加密和解密。但是对称加密的存在一个问题,就是如何保证秘钥传输的安全性,因为秘钥还是会通过网络传输的,一旦秘钥被其他人获取到,那么整个加密过程就毫无作用了。 这就要用到非对称加密的方法。

非对称加密的方法是,我们拥有两个秘钥,一个是公钥,一个是私钥。公钥是公开的,私钥是保密的。用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。我们可以将公钥公布出去,任何想和我们通信的客户, 都可以使用我们提供的公钥对数据进行加密,这样我们就可以使用私钥进行解密,这样就能保证数据的安全了。但是非对称加密有一个缺点就是加密的过程很慢,因此如果每次通信都使用非对称加密的方式的话,反而会造成等待时间过长的问题。

因此我们可以使用对称加密和非对称加密结合的方式,因为对称加密的方式的缺点是无法保证秘钥的安全传输

HTTPS采用对称加密和非对称加密结合的方式来保护浏览器和服务器之间的通信安全。它首先使用对称加密算法加密数据,
接着使用非对称加密算法交换秘钥,最后用数字证书验证身份来保证安全。

因此我们可以使用**非对称加密的方式**来对**对称加密的秘钥**进行传输,
然后**以后的通信使用对称加密的方式来加密**,这样就解决了两个方法各自存 在的问题。

混合加密方式原理:

1. 服务端将非对称加密的公钥发送给客户端;

2. 客户端拿着服务端发来的公钥,对对称加密的key做加密并发给服务端;

3. 服务端拿着自己的私钥对发来的密文解密,从来获取到对称加密的key;

4. 二者利用对称加密的key对需要传输的消息做加解密传输。

但是现在的方法也不一定是安全的,因为我们没有办法确定我们得到的公钥就一定是安全的公钥。可能存在一个中间人,截取 了对方发给我们的公钥,然后将他自己的公钥发送给我们,当我们使用他的公钥加密后发送的信息,就可以被他用自己的私钥解密。然后他伪装成我们以同样的方法向对方发送信息,这样我们的信息就被窃取了,然而我们自己还不知道。

为了解决这样的问题,我们可以使用数字证书的方式,首先我们使用一种 Hash 算法来对我们的公钥和其他信息进行加密生成 一个信息摘要,然后让有公信力的认证中心(简称 CA )用它的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书。当接收方收到数字证书的时候,先根据原始信息使用同样的 Hash 算法生成一个摘要,然后使用公证处的公钥来对数字证书中的摘要进行解密,最后将解密的摘要和我们生成的摘要进行对比,就能发现我们得到的信息是否被更改 了。这个方法最要的是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有 这样我们才能保证数据的安全。

3、http和https的区别

  • HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
  • HTTP 是不安全的,而 HTTPS 是安全的
  • HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
  • 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  • HTTP 无法加密,而HTTPS 对传输的数据进行加密
答:http是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式。它使用TCP协议作为传输协议,保证数据传输的安全性和可靠性。https是超文本传输安全协议,它是在http的基础上加了一个安全套接层TLS/SSL。他们的区别在于:第一点:直观上HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头。第二点:http的默认端口是80;而https的默认端口是443。第三点:在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层。第四点:http是直接通过明文在浏览器和服务器之间传递信息的,传输过程中内容可能被监听,并且无法校验报文的安全性,数据可能会被篡改;另外通信双方没有身份校验机制,通信双方容易被假冒;而https采用对称加密和非对称加密结合的方式来保护浏览器和服务器之间的通信安全。它首先使用对称算法加密数据,接着使用非对称算法交换秘钥,最后用数字证书验证身份来保证安全。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值