【网络】HTTP总结复盘
1.http常见状态码有哪些?
答:
状态码是负责响应的
100 表示服务器收到请求头
200 表示请求成功,返回预期响应
201 表示请求成功并且创建了新资源,如创建新用户等
300 重定向
301 永久重定向,浏览器缓存新URL地址,下次请求新地址
302 临时重定向,不缓存新地址,下次仍请求原地址
400 语法错误,报文错误,无法解析
401 需要登录 身份认证 通常带有www-authenticat报头提示登录方式
403 服务器拒绝请求 无权限或者黑名单
404 请求资源不存在
405 请求方式不支持
500 服务器内部错误
2.HTTP请求头包含什么?
答:
请求行:请求方式 请求路径 http版本 \r\n
请求报头:
host 要请求的目标服务器的地址
user-agent 设备的信息
accept 可接受的响应数据格式
cookie 浏览器存储的身份信息
content-type 请求资源的类型
connection 连接状态 keepalive长连接 close 短连接 (短连接频繁三次握手)
referer 从哪个页面请求过来发起请求的
\r\n
请求正文
3.HTTP响应头包含哪些?
答:
状态行:http版本 状态码 状态码描述 \r\n
响应报头:
location 重定向 配合30X状态码
server 服务器的一些信息
content-type 响应数据格式
content-length 响应数据长度
set-cookie 响应的sessionId给浏览器
connection 连接状态 keepalive/close
\r\n
响应正文
3.HTTP是基于UDP还是TCP?
答:
http/1.0/1.1/2 基于TCP
http/3 基于UDP基础下的QUIC协议
4.HTTP/1.0和1.1和2的区别?
答:
1.0默认短连接,一次请求一个连接,一个网页多个资源需要多次请求,三次握手,一个连接处理一个请求,排队
1.1默认长连接,一次连接处理所有请求,支持断点续传
2 基于二进制帧传递,单一连接+多路复用,同一域名所有请求复用同一TCP连接
1.0默认不带host字段,无法支持虚拟主机(多个域名共享同一ip,host字段需指明要访问的域名)
1.1默认带host字段,支持虚拟主机
5.HTTP的缓存机制?服务器如何判断缓存是否过期?
答:
两种缓存:强缓存和协商缓存
强缓存:发起请求前查找当地缓存,如果缓存新鲜(未过期),直接使用缓存,不向服务器发起请求
协商缓存:如果强缓存过期,给服务器发起请求,携带缓存标识,由服务器判断是否还有效,服务器通过上次修改时间来判断,如果还有效,服务器返回304,告诉浏览器还可以使用,浏览器则继续使用强缓存,而无需服务器重新发响应,如果无效,服务器返回200+预期响应,然后再给浏览器一个强缓存
6.HTTP长连接VS短连接的区别?
答:
短连接:一个请求一个连接、频繁三次握手、网络资源浪费(产生额外ACK报文)、网页延迟增加(多余请求需排队)
长连接:多个请求一个连接、少量三次握手、资源长期占用、队头阻塞(一个请求长时间没处理完,后面的连接陷入阻塞,在http2使用多路复用解决)
短连接 服务器资源释放及时、无队头阻塞问题、兼容性好
长连接 连接开销小、加载快、通过减少TCP握手挥手降低cpu开销
如果长连接想关闭,可通过定时器、或者主动发送connection:close报头,处理此次请求完则断开
7.什么是重定向,重定向与请求转发的区别?
答:
重定向让浏览器重新访问了新地址、二次请求、地址栏也会发生改变
请求转发是在服务器内部将请求分给其他资源处理、地址栏不会改变
重定向用户可以感知到,请求转发用户无法感知到
重定向需要30X状态码、请求转发按正常状态码返回
8.GET与POST的区别?
答:
GET一般用来获取资源,POST一般用来提交一些资源/表单数据等
GET通过URL传参,格式是URL+? & 数据暴露在地址栏
POST通过请求正文传参,数据不暴露在地址栏
GET有长度限制,地址栏毕竟有限,不适合传输大文件
POST请求正文长度长,适合大文件传输
GET不安全、POST还稍微安全一点点
GET是可缓存的,下次请求使用缓存,服务器压力小
POST通常是不可缓存的,因为是提交,可能改变服务器状态,如提交订单等
POST需要缓存的话需要主动设置
9.HTTP和HTTPS有什么区别?
答:
HTTP 明文传输 端口:80 直接跑在TCP上,无身份认证、校验等
HTTPS 密文传输 端口:443 先走TLS/SSL再走TCP 有身份认证、校验等
HTTP适合静态资源,无安全性的 HTTPS适合动态资源,登录支付等
10.HTTPS如何做到的?过程?
答:
通过TLS/SSL协议
数据传输前加密---》防窃听
通过哈希算法生成数据摘要---》防篡改
通过CA证书验证服务器身份---》防伪装
在HTTP和TCP之间加入了TLS/SSL加密层,确保防窃听、篡改、伪装
在TCP握手后,进行TLS握手
---》服务器向客户端证明身份,发送数字证书(里面有服务器的公钥和数字签名、证书过期时间、域名、CA机构等等)
数字签名是对证书的重要信息计算哈希值,然后通过私钥对这个哈希值加密得到的
这个数字签名使用CA私钥加密了,只有CA公钥才能解开,嵌在证书中
---》客户端拿到证书,开始验证
看有效期、域名、签名,客户端内置了CA公钥,通过CA公钥解密数字签名,得到一个哈希值
用这个哈希值判断证书是否匹配,如果不匹配浏览器提示不安全连接
---》客户端验证成功,确认是服务器发来的
生成一个密钥,通过服务器的公钥来加密,发给服务器
服务器通过自己的私钥来进行解密
此时双方开始使用这同一个密钥来进行对称加密的数据传输
最终就是非对称加密+对称加密+证书认证
中间人可以申请自己的证书、但是域名也不匹配
11.为什么数字签名不直接加密,而是先哈希
答:
为了缩小签名密文的长度 ,加快数字签名的验证速度
12.如何成为中间人
答:
ARP欺骗:收到ARP请求包,ARP再找一些主机的MAC地址,通过偷听其他几点的IP,MAC地址
ICMP攻击:ICMP协议有重定向的报文,伪造一个ICMP信息发送给局域网的客户端,伪造自己是一个路由器,所有上网流量都会集中到这里
假WIFI和假网站等
13.cookie session token的区别?
答:
cookie的出现是因为http是无状态的,服务器记不住你
cookie是客户端保存在本地的文本文件,通过大小4Kb以内
通过服务器响应携带的set-cookie字段来保存
向同一域名发起请求时,会自动携带cookie字段发送过去,可设置过期时间
session是服务器端保存的会话数据,每个会话有自己对应的sessionId
服务器创建sessionId为每一个客户端,客户端的cookie保存sessonId即可
token是字符串令牌
cookie文件可能被窃取,不安全,需要引入sessionId来确保安全,但是sessionId也有问题
服务器端需保存,而且还需要会话同步,多台服务器都需要保存sessionId,如果用redis的话
一个崩溃,所有服务器会话,token就只需要服务器解密即可,无需保存了,token存在客户端
14.从敲下URL到整个页面出来的过程
---》用户地址栏输入URL,对URL进行解析,不是完整URL拼接成完整URL
---》解析URL,拿到HTTP/HTTPS 域名 端口 路径 参数
---》浏览器检查有没有强缓存,有缓存直接使用缓存无需发起下面的请求
---》如果没有强缓存发起协商缓存
---》开始DNS域名解析,因为无法通过域名直接访问,只能通过IP访问
---》检查DNS有没有缓存,检查本地缓存--》检查系统缓存--》检查路由器缓存--》请求DNS公共服务器如114.114.114.114--》请求根域名服务器查询--》顶级域名服务器--》如百度的权威域名服务器(因为一个域名可能有多个IP地址,需要负载均衡,返回一个最合适的)
---》拿到IP后开始寻找对面MAC地址,通过ARP协议广播找到对方MAC地址
---》封装成完整报文发起请求--》进行TCP三次握手--》发SYN进入SYN_SENT,接受SYN应答SYN+ACK进入SYN_RCVD并且放入半连接队列--》收到ACK进入连接状态
---》如果是HTTPS则再进行TLS握手
---》服务器处理请求返回响应,浏览器根据响应码,浏览器进行处理和渲染
15.HTTP的请求方法有哪些?
16.如何优化HTTP服务器性能?
答:
采用多线程、线程池、IO多路复用、零拷贝技术sendfile、对请求缓存
17.高并发场景下,如何处理HTTP连接
答:
连接池,管理所有连接、需要发送请求时、获取一个可用连接、使用完放回
18.一次大致的HTTP请求过程?
答:
建立客户端和服务端连接--》发送请求给服务器--》收到请求响应信息--》渲染画面
域名解析--》TCP三次握手--》发起请求--》响应请求--》渲染画面
19.如何保证公钥不被篡改?
答:
将公钥放到数字证书中、只要证书可信、公钥就可信
那如果公钥加密计算量太大呢,如何减少耗时时间:
每一个会话都会生成一个对称密钥,用它来加密信息,由于对称加密所以运算速度快
双方前期通过非对称+证书拿到对称,通过这个对称密钥进行传输,速度快
20.HTTP中缓存的私有和公有字段?
答:
私有字段代表私人缓存,一般存储在用户浏览器中,只能被单独用户使用
公有字段代表公有缓存,一般存储在代理服务器中,可以被多个用户使用
21.GET方法为什么长度限制?
答:
URL限制、防止恶意攻击(构造大量长URL)消耗服务器资源
22.POST方法会发送两个TCP数据包吗?
答:
根据不同浏览器或框架有不同的行为
有时候可能对方希望服务器先确认是否需要接受请求正文,才发生请求正文过去,按两次发
23.对称加密、非对称加密优缺点?
答:
对称加密:运算速度快 不安全
非对称加密:运算速度慢 安全
24.HTTP的缺点?
答:
明文传输通信 不安全、没有验证过程,可能遭伪装、可能遭篡改
25.HTTPS采用的什么策略?
答:
非对称加密+认证证书+对称加密
非对称加密+认证证书用于验证初次身份,后续使用对称加密传输数据
26.HTTP如何禁用缓存?
答:
http/1.1 通过cache-control字段设置
no-store禁止缓存
no-cache 规定每次都要判断缓存是否有效,无效不能使用