前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP、HTTPS协议详解

HTTP、HTTPS协议详解

原创
作者头像
_咯噔_
修改2022-03-31 18:00:18
9420
修改2022-03-31 18:00:18
举报
文章被收录于专栏:CS学习笔记CS学习笔记

一、HTTP协议

  • 超文本传输协议(英文:HyperTextTransferProtocol,缩写:HTTP)
  • HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,是专门用来传输注入HTML的超媒体文档等web内容的协议,
  • 基于 请求-响应 的模式
  • 无状态协议对于事务处理没有记忆能力,不对之前发过的请求和响应进行保存。(这是为了更快地处理大量事务,确保协议的简单和快速)(HTTP/1.1中用Cookie/session技术来保持状态)
  • 无连接的含义是限制每次连接只处理一个请求。采用这种方式可以节省传输时间,并且可以提高并发性能(现在的http协议1.1版本不是直接就断开了,而是等几秒钟,等着用户有后续的操作,如果用户在这几秒钟之内有新的请求)。在HTTP/1.0中默认使用短连接,在HTTP/1.1中默认使用长连接。

HTTP请求方法

GET: 请求获取由Request-URI所标识的资源。

POST: 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件,数据被包含在请求报文的主体中

(GET和POST的区别:

  • get重点在从服务器上获取资源,post重点在向服务器发送数据。
  • GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456,用户可见,所以不够安全,POST方法是把提交的数据放在HTTP包的请求体中,对用户不可见,安全性高
  • Get受URL长度限制传输数据有限,但效率较高。Post可以传输大量数据,所以上传文件时只能用Post方式。
  • get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。post支持标准字符集,可以正确传递中文字符。

HEAD:和GET类似,但只请求响应报文的头部,请求获取由Request-URI所标识的资源的响应消息报头

PUT:向指定资源位置上传其最新内容。

DELETE:请求服务器删除Request-URI所标识的资源。

OPTION:使服务器传回该资源所支持的所有HTTP请求方法,或请求查询服务器的性能

TRACE:回显服务器收到的请求,主要用于测试或诊断。

状态码

200

301:永久重定向

302:临时重定向

400、401、403、404、405

500、501、502、503

请求报文首部

Accept:客户端可接受的MIME类型、user-agent:客户端的信息、content-type:表示报文实体的MIME类型。

Connection:表示是否需要持久连接,里面可以设置keep-Alive(保持连接)或者close(关闭长连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间,提高网络利用率。

响应报文首部

Location: Location响应报头域用于重定向接受者到一个新的位置。

Server:  服务器端的信息

Content-Type :发送给接收者的实体正文的媒体类型。

retry-after:

HTTP1.0与HTTP1.1的区别:

  • 最大变化就是引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。
  • 1.1 版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。缺点:服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"(Head-of-line blocking)。
  • HTTP1.1支持传送内容的一部分。HTTP1.1支持文件断点续传功能。

HTTP1.1与HTTP2.0的区别:

  • 二进制协议:HTTP/2 是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。在应用层和传输层之间增加一个二进制分帧层,提高传输性能
  • 多路复用: 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"(HTTP/1.1中的问题)。
  • 数据流:为了辨别数据包属于哪个回应,HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。
  • 首部压缩:头信息压缩机制(header compression)。头信息使用hpack算法压缩后再发送,在网络上传输就会更快
  • 服务器推送:HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。

参考:http://www.ruanyifeng.com/blog/2016/08/http.html

Cookie和Session

由于HTTP 协议是无状态的,所以可以通过cookie或者session来保存用户身份

相同之处:

cookie和session的共同之处都是用来跟踪浏览器用户身份的会话方式。

不同之处:

作用范围不同:Cookie保存在客户端,Session保存在服务器端。

有效期不同:Cookie可设置长时间保存,比如我们经常使用的默认登录功能,Session一般失效时间较短,客户端关闭或者Session超时都会失效。

隐私策略不同:Cookie存储在客户端,容易被窃取,Session存储在服务器端,安全性高一些。

存储大小不同:单个Cookie保存的数据不能超过4k,对于Session来说,没有上限,但是如果保存太多数据会影响服务器性能。

HTTP的缓存机制:

https://www.cnblogs.com/tugenhua0707/p/10807289.html

二、HTTPS(安全超文本传输协议)

  • 是以安全为目标的HTTP通道,在HTTP的基础上通过身份认证传输加密阶段保证了传输过程的安全性。
  • HTTPS 在HTTP 的基础下加入TLS(Transport Layer Security 安全传输层协议)/SSL(Secure Sockets Layer 安全套接层协议),HTTPS 的安全基础是 TLS/SSL,因此加密就需要TLS/ SSL。
  • 在HTTPS数据传输的过程中,需要用TLS/SSL对数据进行加密,然后通过HTTP对加密后的密文进行传输,
  • HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
  • 默认端口从80调整为443

HTTPS的特点:

  1. 内容加密:混合加密方式,对称加密和非对称加密,数据传输采用对称加密, 非对称加密只作用在证书验证阶段
  2. 验证身份:通过证书认证客户端访问的是正确的服务器。 防止”中间人“攻击
  3. 数据完整性:防止传输的数据被中间人篡改。
  • 非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。

https传输/握手过程:

  • 客户端发起 HTTPS 请求
  • 服务端返回证书(包含公钥)
  • 客户端对证书进行验证(用公钥验证签名)
  • 验证通过后本地生成用于对称加密算法的随机数(密钥)
  • 通过证书中的公钥对随机数进行加密发送给服务端,
  • 服务端接收后通过私钥解密得到随机数,
  • 之后的数据交互通过对称加密算法进行加解密。

ssl握手过程(与上面对应):

  • 客户端向服务器发送Client Hello消息,传送客户端支持的协议版本信息随机数加密算法列表,压缩算法列表等
  • serverhello(服务器选择使用的协议版本,加密套件,压缩算法,随机数等)+certificate(身份认证和密钥交换)+serverhellodone(通知客户端serverhello发送结束)
  • Client Key Exchange(用公钥加密后的随机数)+Change Cipher Spec(通知服务器后续通信将采用新协商的加密算法和密钥)+Encrypted Handshake Message(用密钥加密的握手消息)
  • Change Cipher Spec+Encrypted Handshake Message

HTTP 与 HTTPS 的区别:

  • 安全性
  • 端口
  • 加密和明文
  • HTTPS需要用到SSL证书,需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
  • HTTPS在TCP三次握手阶段之后,还需要进行SSL的handshake,协商加密使用的对称加密密钥。

附:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;(视具体的协议而定)
  6. 浏览器将该 html 文本并显示内容;  

用到的协议:

dns协议,将域名解析为对应的ip地址

http协议,在tcp连接后,采用http协议访问网页

tcp协议,连接服务器

ip协议,tcp连接发送的数据在网络层中使用ip协议

ospf协议(open shortest path fast,开放式最短路径优先),路由器之间的选择使用ospf协议

arp协议,路由器与服务器通信,需要通过arp协议将ip地址转换为mac地址

http的优缺点:

优点:

  • 简单,灵活,易于扩展:因为无太多限制,在报文中没有做过多的限制,只要按照其规则可以自己定义字段,在传输中也不仅仅限于txt文本格式,也可以传输图片,视频,压缩包等等任意数据。
  • 是一个万能的应用层协议。不在意性能http可以传输任何东西的一个协议,没有太多局限性,不相其他协议只局限在一小部分。例如 FTP 只能传输文件、SMTP 只能发送邮件、SSH 只能远程登录等,在通用的数据传输方面“完全不能打”。
  • 无状态,因为没有任何记录。可以减轻服务器的负担,能够更多的cpu和内存用来对外提供服务。因为无状态,对服务器无要求,因此可以组成集群。
  • 可靠性:因为http是基于tcp/ip传输的,因为tcp/ip是一个连接传输协议,因此是是一个可靠的传输。(可靠是相对的,没有网路那一样不可靠)

缺点:

  • 明文不安全。
  • 因为无状态,因此无法做连续多个步骤的操作。例如:加入购物出,结算,支付。每次都需要验证身份信息,但是无状态所以无法连续。解决办法,就是cookie技术。
  • 性能:“请求 - 应答”模式则加剧了 HTTP 的性能问题,这就是著名的“队头阻塞”(Head-of-line blocking),当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端迟迟收不到数据。为了解决这个问题,就诞生出了一个专门的研究课题“Web 性能优化”,HTTP 官方标准里就有“缓存”一章(RFC7234),非官方的“花招”就更多了,例如切图、数据内嵌与合并,域名分片、JavaScript“黑科技”等等

https的优缺点:

1、优点

相比于http,https可以提供更加优质保密的信息,保证了用户数据的安全性,此外https同时也一定程度上保护了服务端,使用恶意攻击和伪装数据的成本大大提高。

2、缺点

  • 第一https的技术门槛较高,多数个人或者私人网站难以支撑,CA机构颁发的证书都是需要年费的,此外对接Https协议也需要额外的技术支持;
  • 其二,目前来说大多数网站并不关心数据的安全性和保密性,其https最大的优点对它来说并不适用;
  • 其三,https加重了服务端的负担,相比于http其需要更多的资源来支撑,同时也降低了用户的访问速度;https在建立连接的时候会大量暂用资源,通信的两端都需要进行加密和解密,会消耗大量的cpu、内存等资源,增加了服务器的负载。https协议需要多次的握手,网络耗时变长。

三、DNS协议

DNS(Domain Names System),域名系统,是进行域名和与之相对应的 IP 地址进行转换的服务器,将域名和IP地址相互映射的一个分布式数据库

查询方式:

  • 递归查询:如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案
  • 迭代查询:如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求

查询过程:

解析域名的过程如下:

(1)首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表

(2)若没有命中,则继续搜索操作系统的 DNS 缓存

(3)若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果

(4)若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询:

  • 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
  • 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
  • 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址

(5)本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来

(6)操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起

(7)至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、HTTP协议
  • HTTP请求方法
  • 状态码
  • 请求报文首部
  • 响应报文首部
  • HTTP1.0与HTTP1.1的区别:
  • Cookie和Session
  • 二、HTTPS(安全超文本传输协议)
  • HTTP 与 HTTPS 的区别:
  • 三、DNS协议
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档