当前位置: 首页 > news >正文

【网络】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 规定每次都要判断缓存是否有效,无效不能使用

http://www.dtcms.com/a/330402.html

相关文章:

  • 基于SpringBoot的救援物资管理系统 受灾应急物资管理系统 物资管理小程序
  • 37 C++ STL模板库6-string_view
  • springboot项目不同平台项目通过http接口AES加密传输
  • 深度学习-卷积神经网络CNN-批量归一化 BatchNorm
  • 机器人伴侣的下一站革命:Deepoc具身智能模型赋能情感化交互
  • 入门基础人工智能理论
  • 设计模式-策略模式 Java
  • Node.js 文件系统详解
  • Node.js/Python 实战:封装淘宝商品详情 API 客户端库(SDK)
  • springboot myabtis返回list对象集合,对象的一个属性为List对象
  • easyexcel模板导出Map数据时空值列被下一行列非空数据覆盖
  • React 数据持久化:从 “刷新就丢“ 到 “永存不灭“ 的实现方案
  • 关于《算法25. K 个一组翻转链表》的解题思路
  • ESP32入门开发·通用硬件定时器 (GPTimer)
  • 【Linux】15. 详解Vim快捷操作
  • Flask ORM 查询详解:Model.query vs db.session.query vs db.session.execute
  • Java Socket 基础教程
  • 新手入门 Makefile:FPGA 项目实战教程(一)
  • pnpm常用命令;为什么使用pnpm?
  • 古中医学习笔记专题文章导航
  • 【STM32入门教程】stm32简介
  • 基于 NVIDIA 生态的 Dynamo 风格分布式 LLM 推理架构
  • Kotlin Data Classes 快速上手
  • SwiftUI 页面弹窗操作
  • Windows批处理脚本自动合并当前目录下由You-get下载的未合并的音视频文件
  • Polyak-Ruppert 平均
  • UCLAMP3311T.TCT TVS二极管阵列 Semtech升特半导体 集成电路IC
  • tp5集成elasticsearch笔记
  • 20. 了解过尾递归优化吗
  • ASCII与Unicode:编码世界的奥秘