计算机网络-HTTP常见面试题

目录

  • 1. HTTP是什么?
  • 2. HTTP常见的状态码?
  • 3. HTTP 常见的字段有哪些?
  • 4. GET和POST有什么区别:
  • 5. GET 和POST方法都是安全和幂等的吗?
  • 6. HTTP缓存技术
  • 7. HTTP/1.1相比HTTP/1.0提高了什么性能?
  • 8. HTTP/2做了什么优化?
  • 9. HTTP3做了哪些优化
  • 10. SSL/TLS的握手过程

1. HTTP是什么?

超文本传输协议

  • 协议:HTTP是一个用在计算机世界里面的协议,使用计算机能够理解的语言确立了一种计算机之间交流通信的规范以及错误的处理方式(两者参与)
  • 传输:HTTP是一个在计算机世界里面专门用来在两点之间传输数据的约定和规范
  • 超文本:文字、图片、视频等的混合体,能够从一个超文本跳转到另外一个超文本

总结:HTTP是一个在计算机世界里面专门用于两点之间传输文字、图片、视频等数据的规范和约定(服务器与服务器之间、服务器与客户端之间)

2. HTTP常见的状态码?

  • 1xx 提示信息,协议处理的中间状态

  • 2xx 服务器成功处理了客户端的请求

    • 200 成功状态码 如果是非head请求,服务器返回的响应头会没有body数据
    • 204 成功状态码 响应头没有body数据
    • 206 成功状态码 分块下载或者断点续传的标识 标识服务器只返回了部分的body数据
  • 3xx 资源位置发生了变动,需要重新发送请求获取资源(重定向)

    • 301 永久重定向 请求资源不存在,需要改用新的URL进行访问(location字段标识指明要跳转的url)
    • 302 临时重定向 暂时需要另外的URL来进行资源访问(location字段标识指明要跳转的url)
    • 304 缓存重定向 重定向到已经存在的缓存文件,不会进行跳转
  • 4xx 客户端发送的请求报文有误 服务器无法处理

    • 400 整体概括客户端的请求报文有误
    • 403 服务器禁止访问资源与客户端无关
    • 404 请求资源服务器无法提供,找不到
  • 5xx 服务器处理请求时内部发生的错误

    • 500 整体概括服务器的错误
    • 501 客户端请求的功能暂不支持,敬请期待
    • 502 服务器作为网关或者代理时,服务器正常工作但是后端的服务发生了错误
    • 503 服务器繁忙(大学抢课常态)

3. HTTP 常见的字段有哪些?

  • Host:客户端发送请求时用来指定服务器的域名
  • Content-Length:服务器本次响应的数据长度 解决TCP的粘包问题
  • Connection:客户端要求服务器使用 HTTP长连接机制方便其他请求复用
  • Content-Type:告诉客户端本次响应的数据是什么格式 (可以用Accept来声明你必须返回什么格式的数据)
  • Content-Encoding:服务器返回的数据使用了什么压缩格式 (可以使用Accept-Encoding声明必须返回什么压缩格式)

4. GET和POST有什么区别:

  • GET:
    • 从服务器获取指定的资源(静态的文本、图片、音视频等)
    • 请求参数在URL中,只能支持ASCLL字符,浏览器对URL的长度有限制
  • POST:
    • 根据请求体body对指定的资源做出处理
    • body的数据格式可以是任意的,只要与服务端协商好就行
    • 浏览器不会对body大小做出限制

5. GET 和POST方法都是安全和幂等的吗?

  • 前置知识:
    • 安全:请求方法不会对服务器上的资源造成不好的影响
    • 幂等:多次执行相同的操作,结果都是相同的
  • get方法是安全且幂等的,数据可以缓存到浏览器上且可以将get请求保存为书签;post方法相反
  • HTTP传输的内容都是明文的,想要避免传输过程中数据被窃取就要使用HTTPS协议,这样所有的HTTP数据就会被加密传输
  • 任何请求都是可以带body的,并不是说get请求不能带body,只能post请求带body
  • url中的查询参数不是get所独有的,post请求的url中也可以有参数

6. HTTP缓存技术

两种实现方式:强制缓存 协商缓存

  • 强制
    • 利用响应头里面的Cache-control字段和Expires字段来实现的
    • 浏览器第一次请求服务器资源是,服务器返回资源同时会在响应头上加上Cache-Control(设置过期时间);浏览器再次请求时会先通过请求资源的时间与Cache-control的时间进行比较计算是否过期,如果没有则使用缓存相反就重新请求服务器;服务器再次收到请求后,会再次更新响应头里面的Cache-Control的值
  • 协商(未命中强制缓存的结果后才执行)
    • 通过服务端告知客户端是否可以使用本地缓存的方式
    • 实现方式有两种:第一种基于时间实现,但容易发生由于时间篡改导致的不可靠的问题;第二种基于一个唯一标识实现
    • ETag的优先级更高:
      1. 没有修改文件内容的情况下文件最后的修改时间可能改变,导致客户端以为文件被改动了
      2. 有些文件是在秒级以内修改的,ETag能够保证这种需求下客户端在1秒内能刷新多次
      3. 有些服务器不能精确获取文件的最后修改时间
    • ETag字段实现协商缓存的过程:
      1. 第一次请求服务器,会在响应头加上一个ETag唯一标识
      2. 再次请求首先检查是否过期,过期之后会在请求头加上一个IF-NONE-MATCH字段值就是ETag唯一标识
      3. 服务器再次收到请求之后,会根据请求头中的ETag唯一标识和当前资源的唯一标识进行比较;值相等返回304,使用缓存;不相等返回200与资源,并在响应头加上一个ETag唯一标识
      4. 客户端收到304的请求响应状态码从本地缓存加载资源,否则就更新资源

7. HTTP/1.1相比HTTP/1.0提高了什么性能?

  • 提高:
    • 使用长连接的方式改善了1.0短连接造成的性能开销
    • 支持管道网络传输,可以同时发送多个请求,减少整体的响应时间
  • 不足:
    • 请求头响应头未经过压缩就发送,如果首部信息越多延迟就会越大(只能够压缩请求体的数据)
    • 发送冗长的首部,频繁的返送相同的首部造成的浪费较多
    • 服务器是按照请求的顺序响应的,如果服务器响应慢就会产生客户端队头阻塞的现象 【HTTP层的队头阻塞】
    • 没有请求优先级的控制
    • 请求只能从客户端开始,服务器只能被动响应

8. HTTP/2做了什么优化?

  • 基于HTTPS的,所以他的安全性是有保障的
  • 头部压缩
    • 使用HPACK算法,在服务端和客户端同时维护一张头部信息表,所有字段都会存入这个表,生成一个索引号,如果有相同的字段直接发送索引号提高速度
    • 如果你发送的头是一样的或者相似的,协议会帮助消除重复的部分
  • 二进制格式
    • 所有的报文都是二进制格式分为头部帧和数据帧,不在需要像1版本那样还要将其转为二进制,可以直接解析二进制报文,增加了数据传输的效率
  • 并发传输
    • 解决了1版本中的队头阻塞的问题
    • 一个TCP连接里面可以有多个流,并且一个流里面可以有多个数据帧
    • 针对不同的HTTP请求用唯一的流ID来进行区分,接收端根据这个ID有序组装HTTP的消息并且可以并行交错地发送请求和响应(乱序发送)
  • 服务器主动推送资源
    • 客户端和服务端都可以建立起Stream流,客户端建立的流必须是奇数,服务端必须是偶数(主动推送的)
    • 客户端请求发送获取html,1版本还需要再次请求css文件,而当前版本服务端会主动的推送css文件减少了消息传递的次数
  • 不足:
    • 2版本是基于TCP协议来传输数据的,TCP是字节流协议,必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里面的数据返回给HTTP应用(当前一个字节数据没有到达时 丢包,后面到达的字节数据只能存在缓冲区中等到这一个字节重传且到达之后,应用层才能够从缓冲区拿到数据) 【TCP层的队头阻塞】

9. HTTP3做了哪些优化

  • 将TCP传输改为了UDP传输并配合QUIC协议实现TCP的可靠性传输
  • QUIC协议特点
    • 无队头阻塞
      • 也是跟2版本的多路复用的概念类似,在同一个连接上并发传输多个流,当某个流发生丢包的时候只会阻塞这一个流,其他的流不会收到影响与2相反,多个流之间相互独立 只要数据一到达应用层就可以直接读取
    • 更快的连接建立
      • 1版本和2版本中的TCP和TLS没有结合在一起,所以在连接的时候需要分别进行握手,可能会存在3次的RTT或者2次的RTT
      • QUIC协议里面握手过程只需要1RTT来确认双方的连接ID,3版本的QUIC协议不是与TLS分层的,包含了它在里面并且使用的时TLS1.3因此只需要1个RTT就可以完成连接的建立和密钥的协商 会话恢复的时候有效负载数据与第一个数据包一起发送可以实现0RTT的效果
    • 连接迁移(基于连接ID实现)
      • 当移动网络切换的时候必须进行断开重新建立连接,建立连接的过程2版本需要进行TCP三次握手和TLS四次握手的过程并且还要考虑TCP慢启动的减速过程这里就会产生较高的连接迁移成本
      • QUIC协议没有使用四元组的方式来绑定连接,而是通过连接ID来标记通信两端的,因此网络变化之后只要互相保留了这个连接ID那么就能实现无缝的复用原连接没有丝毫卡顿
      • QUIC是新的协议很多设备不知道什么是QUIC只会当作UDP,并且有的网络设备是会丢UDP包的,如果网络设备无法识别这是一个QUIC包那么就会当作UDP包然后被丢弃

10. SSL/TLS的握手过程

  • TLS1.2
    • 需要2个RTT往返时延,也就是4次握手
  • TLS1.3
    • 只需要1个RTT往返时延,也就是3次握手

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCSA第四天

ASPF FTP --- 文件传输协议 Tftp --- 简单文件传输协议 FTP协议相较于Tftp协议 ---- 1,需要进行认证 2,拥有一套完整的命令集 用户认证 防火墙管理员认证 ---- 校验登录者身份合法性 用户认证 --- 上网行为管理中的一环 上网用户认证 --- 三层认证…

Java SQL 连接(初级)

实训Day3 记实 实训第三天,今天是头脑风暴的第二天,课程将SQL与Java(idea)代码结合,这是一项具有挑战性的代码课程。课程将两个应用结合起来,展现了Java代码的跨平台性,展现了Java语言的封装性…

[终端安全]-6 移动终端之应用程序安全

笔者在终端安全专题前面的文章中介绍了移动终端硬件安全和操作系统安全,本文主要介绍移动终端应用安全。在本文最前面,笔者想先解答一位朋友的疑问,为什么需要费心打造一个完整的面面俱到的安全体系? 1 移动终端安全的重要性 移…

Cesium中实现全球体积云效果的一种方案

原生 Cesium 提供了一种积云的效果,云的物理特征和渲染性能都还不错,这种方案适合表达小范围相对离散的云朵,但是用来实现全球范围下相对连续、柔和渐变的云层比较困难。本文在体渲染的基础上,参考了开源社区中 shadertoy 和 thre…

c#调用c++ dll库报错System.BadImageFormatException

System.BadImageFormatException:“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)” 1. dll需要选择release模式进行编译 2.选择相同位数,比如x64平台,c#也需要x64 3.不要设置c#不支持的函数供调用 比如: c可以输出到控制台…

Meta发布Llama 2驱动的AI代码生成器:Code Llama,开源来袭!

Meta 刚刚了号称是编程领域 “最先进的大语言模型”—— Code Llama ,可根据 代码和自然语言提示 生成代码和有关代码的自然语言,支持多种主流编程语言, 包括 Python、C、Java、PHP、Typescript (Javascript)、C# 和 Bash 。 Code Llama 完全…

人话学Python-基础篇-输入输出,数据类型转换,注释

##以下内容均为自我学习的理解,大多数是本人学习的经验。 一:输入输出 Python的输出并不像其他语言一样那么复杂,有一大堆的标识符、占位符等。只需要一个简单易懂的单词就可以完成变量的输入。 print("Python is the best language i…

拆分盘究竟是什么?一篇文章带你了解!

拆分盘是一种特殊的理财产品或投资模式,它通常被描述为“只涨不跌”的投资方式,多指股票,但实质上与传统股市中的股票有本质区别。以下是对拆分盘的详细解析: 一、拆分盘的定义 拆分盘可以理解为一种只涨不跌的理财股票。其特点在…

EtherCAT主站IGH-- 12 -- IGH之foe_request.h/c文件解析

EtherCAT主站IGH-- 12 -- IGH之foe_request.h/c文件解析 0 预览一 该文件功能`foe_request.c` 文件功能函数预览二 函数功能介绍1. `ec_foe_request_init`2. `ec_foe_request_clear`3. `ec_foe_request_alloc`4. `ec_foe_request_copy_data`5. `ec_foe_request_timed_out`6. `e…

Nikola Tesla Quotes * 3

“If you only knew the magnificence of 3, 6 and 9, you would have a key to the universe”. “If you want to find the secrets of the universe, think in terms of energy, frequency and vibration”. “My brain is only a receiver, in the Universe there is a cor…

OpenGL3.3_C++_Windows(29)

Demo exposure 0.1f exposure 5.0f HDR色调映射 问题:有多个亮光源使这些数值总和超过了1.0,颜色值会被约束在1.0,从而导致场景混成一片,难以分辨:色调映射:用更大范围的颜色值渲染从而获取大范围的黑暗…

java数组的扩容与缩容

一、java扩容缩容的说明 我们前面学过,创建java数组会在内存中开辟一块连续的空间,该空间固定不允许扩大和缩小。那么一个java数组要怎么实现扩容和缩容操作呢? 也许你会想到。再创建一个大容量的数组,将旧数组中的元素拷贝到新数…

怎么将3张照片合并成一张?这几种拼接方法很实用!

怎么将3张照片合并成一张?在我们丰富多彩的日常生活里,是否总爱捕捉那些稍纵即逝的美好瞬间,将它们定格为一张张珍贵的图片?然而,随着时间的推移,这些满载回忆的宝藏却可能逐渐演变成一项管理挑战&#xff…

LeetCode 981, 219, 78

目录 981. 基于时间的键值存储题目链接标签思路代码 219. 存在重复元素 II题目链接标签思路代码 78. 子集题目链接标签思路代码 981. 基于时间的键值存储 题目链接 981. 基于时间的键值存储 标签 数组 二分查找 排序 思路 时间戳根据时间生成,时间越早&#x…

鸿蒙语言基础类库:【@ohos.util (util工具函数)】

util工具函数 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 该模块…

Linux系统之lscpu命令的基本使用

Linux系统之lscpu命令的基本使用 一、lscpu命令介绍二、lscpu命令的使用帮助2.1 命令格式2.2 命令选项2.3 使用帮助 三、lscpu命令的基本使用3.1 查看lscpu版本3.2 直接使用lspcu命令3.3 可解析的格式打印cpu信息3.4 可扩展格式打印cpu信息 四、lscpu命令使用注意事项 一、lscp…

【题目/算法训练】:单调队列单调栈

🚀 前言: 【算法】单调队列&&单调栈 可以在看完这篇文章后,再来写下面的题目 一、绝对差不超过限制的最长连续子数组 思路: 1) 就相当于滑动窗口,维护滑动窗口内的两个值,一个是最大值…

Linux常用选项和指令

目录 Linux指令使用注意 用户创建与删除 ls指令 ls指令介绍 ls常见选项 ls选项组合使用 pwd指令 Linux文件系统结构 多叉树结构文件系统介绍 多叉树结构文件系统的特点 cd指令 绝对路径 相对路径 cd指令介绍 家户目录 最近访问的目录 touch指令 ​编辑mkdir指…

3D模型格式转换工具HOOPS Exchange如何访问产品制造信息(PMI)?

在当今的制造和设计领域,产品制造信息(PMI)在确保零件和产品满足精确规格方面发挥着至关重要的作用。PMI,特别是几何尺寸和公差(GD&T),提供了制造过程中必须遵循的详细指导。 随着技术的进…

保持边界感

人与人相处,如同刺猬抱团取暖:靠得太近,会刺痛对方;离得太远,又无法御寒。很多时候,我们与人相处,不是不懂得亲近,而是不懂得疏远。人与人交往,拥有边界感真的很重要。 …