当前位置: 首页 > 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.lryc.cn/news/620965.html

相关文章:

  • 河南萌新联赛2025第(五)场:信息工程大学补题
  • TensorFlow深度学习实战(32)——深度Q网络(Deep Q-Network,DQN)
  • Azure微软云内网接入问题
  • 老生常谈之引用计数:《More Effective C++》条款29
  • 位操作:底层编程利器
  • 通过网页调用身份证阅读器http websocket方法-华视电子————仙盟创梦IDE
  • Uniapp 中 uni.request 的二次封装
  • 22.Linux samba服务
  • 15、C语言预处理知识点总结
  • 18.14 全量微调实战手册:7大核心配置提升工业级模型训练效率
  • 并发编程原理与实战(二十三)StampedLock应用实战与其他锁性能对比分析
  • 深度学习ubuntu系统常用指令和技巧
  • VisDrone数据集,专为无人机视觉任务打造
  • Linux面试题及详细答案 120道(1-15)-- 基础概念
  • 9.【C++进阶】继承
  • 开源数据发现平台:Amundsen 快速上手指南
  • 微服务、分布式概念-以及集群部署 vs 分布式部署
  • C# LINQ 全面教程:从入门到精通
  • 【19-模型训练细节 】
  • Linux 编译过程中遇到 TMPDIR 空间不足的问题
  • 算法应用上新!自适应更新策略差分进化算法求解球形多飞行器路径规划问题,附完整MATLAB代码
  • 智慧城市SaaS平台/专项管理系统
  • PyCharm 2025.2:面向工程师的 AI 工具
  • Nginx学习笔记(九)—— Nginx Rewrite深度解析
  • 学习嵌入式第二十八天
  • python爬虫学习(2)
  • 大模型微调方法讲解
  • linux 软硬链接详解
  • 服务器数据恢复—误删服务器卷数据的数据恢复案例
  • ESXI 6.7服务器时间错乱问题