http与https详解

本文详细介绍了HTTP和HTTPS的概念、版本发展、报文格式、数据加密认证过程,以及浏览器发送请求的处理流程,并对比了两者的主要区别。
摘要由CSDN通过智能技术生成

http与https详解


前言

http协议在网络模型中处于应用层的协议,本身不传输数据包,只是规定了客户端和服务器端之间的通信格式。文章简单介绍Http和Https的相关概念及差异


一、Http

1.简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据的应用层协议(HTML 文件, 图片文件, 查询结果等)。

2.不同版本介绍

(1)HTTP 0.9
是最初的HTTP协议,已经过时。特点:只支持GET请求、没有协议头、无状态性、只能传输超文本

(2)HTTP 1.0
这一版本在请求和响应中加入了HTTP版本号,这一特点在之后的版本中保持不变。

相对于HTTP 0.9 新增以下特性:
除了GET命令,新增了POST和HEAD命令,不再只接收HTML格式数据,可以设置contentType传输多种数据格式,新增状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等

(3)HTTP 1.1
这是目前最流行的HTTP协议,我在有时候做一些小网站的时候也会使用。相对于HTTP 1.0

新增以下特性:
引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用。

请求和响应都支持Host头域,认为每一个服务器都绑定唯一的一个IP地址。

字节范围请求:若客户端此时已经有一部分数据,为节省带宽,可以只向服务器端请求一部分数据,这个功能在请求头的range头域实现。

新增了一批Request method:HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT方法

(4)HTTP 2.0
为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。但目前似乎还没流行起来。

主要新增特性:
增加双工模式,也就是不经客户端可以同时发送多个请求,服务器端也能处理多个请求,以此来提高利用率,也是这个版本最大亮点。

服务器推送:不经请求向客户端发送数据二进制分帧层数据流:将每个请求或相应的所有数据包称为一个数据流,每个数据流有一个ID,规定客户端发出的ID为奇数,服务器端发出的ID为偶数;

客户端还可以设置优先级,优先级越高,服务器越优先处理头信息压缩机制:由于HTTP很多请求头信息中的字段都一样,可以先压缩后发送,而且客户端和服务器端可以同时维护一张头信息表,只用穿输索引号,大大提高效率

(5)HTTP3.0
HTTP3.0 在2018年发布,基于谷歌的QUIC,底层使用udp代码tcp协议。
主要提升:使用stream进一步扩展HTTP2.0 的多路复用,传输多少文件就可以产生多少stream,若发生丢包,只需要传输丢失的stream基于UDP,提高了传输效率,降低延迟通过引入Connection ID,使得 HTTP/3 支持连接迁移以及 NAT 的重绑定HTTP/3 含有一个包括验证、加密、数据及负载的 built-in 的 TLS 安全机制

3.Http报文格式

(1)请求报文
请求报文包含四部分:
a、请求行:包含请求方法、URI、HTTP版本信息
b、请求头
c、请求空行
d、请求体

请求头包含内容:
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
Cookie:客户端用它向服务器传送数据
Cookie2:用来说明请求端支持的cookie版本

(2)响应报文
响应报文包含四部分:
a、状态行:HTTP版本信息、状态码、状态描述
b、响应头
c、响应空行
d、响应实体

响应头包含的内容:
Age:(从最初创建开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或时间重试
Server:服务器应用程序软件的名称和版本
Title:对HTML文档来说,就是HTML文档的源端给出的标题
Warning:比原因短语更详细一些的警告报文
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
Set-Cookie2:与Set-Cookie类似
WWW-Authenticate:来自服务器的对客户端的质询列表

4.常用响应码

100:继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。

101: 转换协议 在发送完这个响应最后的空行后,将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。

102:继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。

200:请求成功 处理方式:获得响应的内容,进行处理

201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到

202:请求被接受,但处理尚未完成 处理方式:阻塞等待

204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户,则无须为此更新自身的文档视图。 处理方式:丢弃

300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL

302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL

304:请求的资源未更新

400:非法请求

401:未授权 处理方式:丢弃

403:禁止 处理方式:丢弃

404:没有找到 处理方式:丢弃

500:服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在的源代码出现错误时出现。

501:服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

502:错误网关 作为网关或者工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

503:服务出错 由于临时的维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

二、Https

1.简介

HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议。https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL

2.数据加密认证

2.1 对称/非对称加密

对称加密:加密和解密使用同一个密钥。

非对称加密:加密和解密不是使用同一个密钥,密钥成对出现。公钥加密的数据只能由私钥解密,私钥加密的数据只能由公钥解密。

2.2 加密过程

1、首先是非对称加密:服务器生成公私钥,然后将公钥发送给浏览器。浏览器生成一段随机数据并使用公钥加密后发送给服务器。服务器使用私钥解密后获得这个随机数据。

2、然后是对称加密:浏览器和服务器都拥有这段随机数据(对称密钥),之后的数据都使用这个密钥进行加密传输。

风险:
假如在服务器发送公钥给浏览器的时候,公钥被拦截且被攻击者替换成了自己的公钥然后发送给浏览器。浏览器使用攻击者的公钥加密生成的随机数据然后发送给服务器。攻击者拦截到这段数据然后使用自己的私钥解密得到了明文(对称密钥)。

然后使用最开始的服务器公钥对这段明文进行加密,返回给服务器。这样攻击者也得到了对称密钥,后续的加密也就毫无意义。攻击者就像一个黑中介一样两头骗

2.3 CA机构和TLS证书

可以引入公钥的加密和认证机制,从而防止公钥被篡改

CA机构,它有一对公私钥。服务器端需要将自己的公钥,域名,机构等数据集合信息发送给CA机构,然后CA机构使用自己的私钥进行加密(数据的哈希值进行加密)得到签名。然后将这段明文信息和签名放在一起发送给申请者,这就是TLS证书

1、服务器将申请的TLS证书发送给浏览器,浏览器使用CA机构公开的公钥对TSL证书签名进行解密。如果解密结果和TLS证书明文部分一致则通过认证。

2、浏览器提取TLS证书公钥部分,并生成一段随机数据,加密后发送给服务器。服务器使用私钥解密得到明文,后续使用它进行对称加密。

三、浏览器发送请求处理流程

1、用户输入 URL
用户在浏览器地址栏中输入要访问的网址(URL),或者点击页面上的链接。浏览器内部代码将url进行拆分解析。

2、DNS解析
浏览器通过DNS(域名系统)将输入的域名解析为对应的IP地址。这是为了确定要请求的服务器的位置。

3、建立TCP连接
浏览器使用HTTP或HTTPS协议,与目标服务器建立TCP连接。这是通过使用服务器的IP地址和端口号来实现的。它为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理,并为它们编号,方便服务器接收时能准确地还原报文信息。TCP协议通过“三次握手”等方法保证传输的安全可靠。

4、发起HTTP请求
浏览器构建HTTP请求,包括请求方法(GET、POST等)、请求头部(包括User-Agent、Accept、Cookies等信息)、请求体(对于POST请求)等。然后将请求发送给服务器。

5、服务器拦截请求
当客户端发起一个HTTP请求时,Web容器(例如Tomcat)会拦截该请求并根据请求的URL来确定如何处理它。URL通常包括协议(http://或https😕/)、主机名(域名或IP地址)、端口号(默认是80或443)、路径(URL的一部分,用于定位资源或控制器)、查询参数等。

6、服务器处理请求
服务器接收到HTTP请求后,根据请求的内容和URL,执行相应的处理,可能包括查询数据库、处理业务逻辑等。

7、服务器发送HTTP响应
服务器构建HTTP响应,包括响应状态码、响应头部(包括Content-Type、Content-Length等信息)和响应体(包含请求的实际内容)。然后将响应发送回浏览器。

8、浏览器接收响应
浏览器接收到服务器的HTTP响应,然后根据响应的内容进行解析和渲染。如果响应是一个HTML页面,浏览器会渲染页面并显示给用户。

9、关闭连接
一旦请求和响应完成,浏览器和服务器之间的TCP连接通常会被关闭,以释放资源。

10、页面渲染
浏览器会解析HTML,执行JavaScript代码(如果有),加载并显示页面上的资源(例如图像、样式表等),最终呈现完整的页面给用户。

11、用户与页面交互
用户可以与页面交互,点击链接、填写表单、触发事件等。这些操作可能导致新的HTTP请求被发送到服务器,从而开始新的请求和响应周期。

四、Http和Https比较

1、HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头

2、HTTP 是不安全的,而 HTTPS 是安全的

3、HTTP 标准端口是80 ,而 HTTPS 的标准端口是443

4、在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层

5、HTTP 是超文本传输协议,信息是明文传输,无法加密,而HTTPS 对传输的数据进行加密

6、HTTP无需证书,而HTTPS 需要CA机构颁发的SSL证书,需要一定的费用

总结

以上就是今天要讲的内容,本文仅仅简单介绍了Http和Https相关的知识点。后续有新的内容继续补充!

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值