10分钟看懂HTTP / HTTPS 常见问题

本文深入解析HTTP协议,涵盖状态码、常见字段、GET与POST区别、安全性和幂等问题,探讨HTTP1.1的优缺点,详解Cookie与Session机制,对比HTTP与HTTPS,介绍HTTPS的安全解决方案,阐述HTTP/2的性能优化。

HTTP问题大集合

1、HTTP常见的状态码有哪些?


  • 200 OK 常见的成功状态码,如果是非 HEAD 请求,返回响应头部会有 body数据

  • 204 No Content 与200相同,但是头部没有 body 数据

  • 206 Partial Content 用于HTTP分块下载和断电续传,响应返回的body数据不是全部资源

  • 301 永久重定向,请求资源已经不存在,需要改用新的URL访问

  • 302 临时重定向,需要使用另一个URL来访问

  • 二者都会在响应头中的 Location 指明重定向的URL

  • 304 缓存重定向,不具有跳转含义,重定向已存在缓冲文件

  • 400 客户端请求报文有错,笼统错误

  • 403 服务器静止访问资源,并不是客户端出错

  • 404 请求资源在服务器上不存在或未找到

  • 500 笼统错误,服务器出错

  • 501 客户端请求的功能还不支持

  • 502 服务器作为网关或代理时,访问后端服务器出错

  • 503 服务器正忙,稍后重试

HTTP封装后的数据报格式

**加粗样式**

2、HTTP常见的字段有哪些?

​ Host :指定服务器域名

​ Content-Length:表明本次回应的数据长度

​ Connection :keep-alive 客户端请求服务器使用TCP持久连接

​ Content-Type:服务器回应客户端,本次数据是什么格式

​ Content-Encoding:服务器返回数据采用什么压缩方法

3、GET和POST的区别是什么?

​ GET:从服务器获取资源(静态文本、页面、图片、视频等)

​ 比如,你打开我的博客,浏览器就会发送 GET 请求给服务器,服务器就会返回 文章的所有文字及资源

​ POST:向 URL 指定的资源提交数据,数据就放在报文的 body 里

​ 比如,你在我的博客留言并点击提交,浏览器就会执行POST请求,把留言的文字放进报文body里,然后拼接好POST请求头,通过TCP协议发给服务器

GETPOST
数据长度限制给URL中存放数据,而URL最大长度2048无限制
数据类型限制只允许ASCII字符无限制
安全性安全性较差,数据是URL的一部分较好
可见性数组在URL中,对所有人可见放在Body中不可见
存放位置数据存放在URL中可以在URL中,也可以在Body中

4、GET和POST 方法都是安全和幂等的吗?

安全:请求方法不会破坏服务器上的资源

幂等:多次执行相同的操作,结果都是相同的

​ GET方法就是安全且幂等的,因为 GET 方法是 只读 操作

​ POST方法不安全且不是幂等的,它会提交数据,会修改服务器上的资源

5、HTTP(1.1)的优缺点?

!!!优点!!!

HTTP 最突出的优点是「简单、灵活易于扩展、应用广泛 和 跨平台」

1.简单:HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式

2.灵活易扩展:HTTP 中的各类请求方法、URL、状态码、头子段等都没有被固定死,允许开发人员自定义和扩展。 同时 HTTP 工作在应用层,它的下层可以随意变化

​ HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层

3.应用广泛和跨平台:从电脑浏览器、手机APP 等,都是HTTP 的应用

!!!缺点!!!

​ **无状态(优点):**服务器不会去记忆 HTTP 的状态,则不需要额外的资源来记录状态信息,能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务

​ **①无状态(缺点):**服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。例如 登录->加购物车->下单->结算,这一系列操作中每次都要访问一遍身份信息

​ =解决方案: Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。相对于,在客户端第一次请求后,服务器会给客户端带上一个标记,之后再请求时,就能认得客户端了

②明文传输:

(优点)方便调试、直接抓包、F12查看报文

(缺点)内容会被窃听、不验证对方身份访问了假的网站、不能保证报文完整性可能被篡改

​ 解决方案:可以用 HTTPS 的方式解决,通过引入 SSL/TLS 层,使得在安全上达标

5.1、Cookie 和 Session

​ Cookie就是为了弥补HTTP协议无状态这一不足出现的机制;

Cookie:本质上就是一段文本信息。客户端请求服务器的时候,如果服务器需要记录该用户,就用response向客户端颁发一个Cookie。客户端会把Cookie保存起来,当再次访问请求这个服务器的时候,客户端把请求的URI和Cookie一起发送给服务器,服务器检查Cookie,以此来辨别用户状态

Session:是服务器端使用的一种记录客户端状态的机制,在客户端访问服务器的时候,服务器会开辟一块内存空间,将用户身份信息保存到服务器上,存储结构为ConcurrentHashMap,再次访问的时候只需要从该Session中查找用户信息就行

​ 因为Session存在服务器内存中,且每个用户独立,为了防止内存溢出,服务器会清理长时间没有活跃的Session

5.2、Cookie 和 Session 联系

​ 在服务器第一次收到请求后,创建 Session 对象,生成 Session_id,并通过响应头中的 Set-Cookie 命令,向客户端要求使用 Cookie(将Session_id 放入到Cookie中),客户端收到响应后,之后每次向服务器发送请求时都会带上该 Cookie 信息。服务器读取请求头中的 Cookie信息,就可以得到本次请求的 Session_id

6、HTTP(1.1)的性能如何?

​ HTTP是基于 TCP/IP,使用了 请求-应答 的通信模式

​ ①长连接:在HTTP(1.0)中,每次发起一个请求都建立一次TCP连接,且是串行请求,性能低、开销大

​ 而在HTTP(1.1)中,提出了长连接的通信方式(只要任意一端没有明确提出断开连接,则保持 TCP 连接状态),减少了重复建立和断开连接的开销

​ ②管道网络传输:服务器允许客户端连续发送请求,服务器还是按照顺序回应请求,但如果开始的请求处理太慢还是会造成阻塞,称为 “队头阻塞”,而在后续的HTTP/2,HTTP/3都做出了优化

7、HTTP和HTTPS区别?

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  3. HTTP 的端口号是 80,HTTPS 的端口号是 443。
  4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

8、HTTPS如何解决HTTP中的不安全问题

由于HTTP是明文传输,所以会有以下风险

窃听风险 -> 信息加密 (混合加密)

篡改风险 -> 校验机制 (摘要算法)

冒充风险 -> 身份证书 (数字证书)

①混合加密:

[非对称加密]:通信建立前采用非对称加密方式交换[会话秘钥], 后续则不使用非对称加密 (使用两个密钥,公钥和私钥,私钥保留,公钥分发出去,做到了安全的密钥交换,但是速度慢)

[对称加密] :通信过程中全部使用对称加密的[会话秘钥]的方式 加密明文数据 (只使用一个密钥,无法做到安全的密钥交换,但是运算速度快)

②摘要算法

摘要算法主要体现了数据的完整性,可以为数据提供独一无二的**“标识”**,用来验证数据的完整性,防止在传输中被篡改

​ 客户端发送明文前通过摘要算法计算出特殊标识,发送时将明文和标识一起加密,服务器收到并解密后,再根据摘要算法算出标识进行对比

③数字证书

客户端向服务器索要公钥,服务器将公钥放在CA(数字证书)中,发给客户端,只要证书是可信的,公钥就是真的,之后客户端发送消息使用公钥加密,服务器再使用私钥解密,就可以安全传输了。

9、HTTPS是如何建立连接的?

​ SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥

  • 双方协商生产 [会话秘钥]

  • 双方采用 [会话秘钥] 进行加密通信

SSL/TSL 的握手是 四次通信 的过程

​ ①客户端向服务器发送请求 客户端支持的SSL/TSL版本、客户端产生的随机数(用来产生密钥)、客户端支持的加密算法

​ ②服务器响应 确认SSL/TSL版本如果不支持关闭加密通信、服务器产生随机数、确认支持的加密算法、服务器的数字证书

​ ③客户端回应 先根据浏览器或支持系统中的CA公钥确认证书真伪、一个经过加密的随机数、通知服务器下来的信息都使用 [密钥] 加密

​ ④服务器最后回应 将刚刚发送来的加密随机数通过加密算法计算出 [密钥]、通知客户端随后信息都使用 [密钥] 加密通信、握手结束通知,同时把之前所有的内容都进行摘要,以供客户端校验

10、HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 优化

​ 1.0 -> 1.1 :
①使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销
②支持 管道(pipeline)网络传输

​ 1.1 -> 2 :
①HTTP/2 是基于 HTTPS 的,安全性有保障
头部压缩算法,客户端和服务器共同维护一个头信息表,将字段存入表中,同时生成索引号,之后发生索引号,提供速度
采用二进制格式,头信息和数据体都是二进制,提供传输效率
多路复用,可以在一个连接中并发多个请求和回应,降低了延迟,避免了[队头阻塞]
数据流(stream),HTTP/2 的数据包不是按顺序发送,所以对数据包做标记,指出它属于哪个回应;客户端还可以指定数据流的优先级,服务器优先响应
服务器推送(Cache Push),服务器可以主动向客户端发送消息,例如 : 浏览器刚请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值