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协议发给服务器
| GET | POST | |
|---|---|---|
| 数据长度限制 | 给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区别?
- HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
- HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- HTTP 的端口号是 80,HTTPS 的端口号是 443。
- 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 文件等静态资源主动发给客户端,减少延时的等待
本文深入解析HTTP协议,涵盖状态码、常见字段、GET与POST区别、安全性和幂等问题,探讨HTTP1.1的优缺点,详解Cookie与Session机制,对比HTTP与HTTPS,介绍HTTPS的安全解决方案,阐述HTTP/2的性能优化。
8627

被折叠的 条评论
为什么被折叠?



