HTTP相关面试题

1. HTPP基本概念

HTTP是超文本传输协议。本质上就是一个可以传输图片、视频、文字的计算机与计算机之间的协议

1.1. HTTP常见的状态码

2XX状态码: 主要用于表示已经服务器已经成功的处理了请求

[200 ok ]: 是最常见的状态码,表示我们请求成功且响应内容(响应头body)已经收到,表示一切正常

[204 No Content] : 表示请求成功,但是没有返回响应内容

[206 Partial Content ]: 主要是用于表示HTTP分块下载和断点续传,表示响应的数据只返回了一部分,也是服务器处理成功的一个状态

3xx状态码: 表示资源临时或者永久不存在当前URL上了,需要客户用返回的URL(返回的Location)来跳转新的URL

[301 Monved Permanently] : 表示永久重定向,请求资源已经转移或者不存在了,需要改用新的URL

[302 Monved Permanently] : 表示临时重定向,请求资源还在,但是需要用另一个URL来访问

301和302都会在表头返回一个Location来指明要跳转的URL,浏览器会自动重定向新的URL

[304 Not Modified] : 不具有跳转的含义,表示资源未修改,重定向已存在的资源,也称作缓存重定向,主要用于做缓存控制

4xx状态码: 表示客户端发送的请求有误,服务器无法处理,这就是错误码的含义

[400 Bad Request] : 表示客户端的请求报文错误,但是只是个模糊的错误,无法具体分析

[403 Forbidden]: 表示服务器禁止访问资源,并不是客户端请求错误

[404 Not Found] : 表示请求的资源在服务器上找不到或不存在,所以无法提供给客户端,通常见于请求接口不存在或者代理没有配置成功

5xx状态码: 表示服务器连接错误或者nginx之类的配置错误,通常与客户端无关

[500 internal Server Error]: 与400类型相同都是模糊的错误码,只知道发生了错误,但是具体是什么错误不知道,但是是属于服务端的错误码

[501 Not Implemented] : 表示客户端请求的功能还不支持,类似于接口还没做完之类的

[502 Bad Geteway]: 通常用于表示服务器作为网关或代理时发生的错误码,一般情况是服务器正常,但是后端服务报错了,进程被打断了

[503 Service Unavailable]: 表示服务器很忙,暂时无法响应客户端请求,类似"网络服务很忙,请稍后重试"的意思

1.2. 三次握手(TCP建立)

  • 客户端发报文:SYN=1,seq=x;
  • 服务端响应报文:SYN=1,ACK=1,seq=y,ack=x+1;
  • 客户端回应报文:ACK=1,,seq=x+1,ack=y+1;

前面两次握手很好理解,第三次握手的意义在于网络延迟的时候,客户端发生了第一个请求连接,由于网络原因,客户端没有收到确认报文,所以会再次先服务端发送报文,然后此时网络通畅服务端收到请求并回应了此次报文关闭了连接,但是之前的那次报文因为网络通畅了也发送到了服务端,此时由于没有第三次握手确认,服务端又会重新与客户端建立连接,造成不必要的性能浪费

1.3. 四次挥手(TCP的释放)

  • 客户端发送报文:FIN=1,seq=a;
  • 服务器响应报文:ACK=1,seq=b,ack=a+1;
  • 服务器发送报文:FIN=1,ACK=1,seq=c,ack=a+1;
  • 客户端响应报文:ACK=1,seq=a+1,ack=c+1

1.3.1. 第一次挥手:

客户端发送FIN报文,并且立即停止发送数据,释放报文首部,此时客户端进入FIN-WAIT-1(终止等待1)状态

1.3.2. 第二次挥手

服务端收到连接释放报文,发出响应报文ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时服务端进入CLOSE-WAIT(关闭等待状态),客户端收到响应报文之后进入半关闭状态,此时客户端已经不需要向服务端发送数据了,如果服务端发送数据,仍然可以接收

1.3.3. 第三次挥手

服务器将最后的数据发送完毕,就发送连接释放报文,FIN=1,ack=u+1,由于处于关闭等待状态,服务端发生的数据客户端是否接收完成,服务端并不清楚,所以需要等客户端做出回应

1.3.4. 第四次挥手

客户端收到服务端发送的连接释放报文,做出确认,ACK=1,ack=w+1,此时客户端进入TIME-WAIT(时间等待)状态,此时TCP还没有释放,需要等2*MSL(最长报文寿命时间)之后客户端撤销相应的TCB之后才进入CLOSED状态。服务端收到客户端的确认报文立即进入CLOSED状态,此次TCP连接就结束了

2. GET 和POST 的区别

GET

  • 主要用于向服务器请求资源,这个资源可以是视频、图片和文字等
  • 对于服务器来说相对于POST请求,GET请求更安全,因为不会破坏服务器资源,多次请求都是返回一样的结果

POST

  • 主要用于向服务器发送数据,比如修改数据,进行一些服务器的操作等等
  • 对于服务器来说,POST请求是有风险的,因为他是增删改查的操作,会修改和删除服务器资源,所以是不安全的

3. HTTP特性

3.1. HTTP1.1的优点

简单

HTTP报文采用header + body的格式,头部信息也都是由key=value对组成,便于理解,减低了学习成本和使用门槛

灵活和易于扩展

HTTP的各类请求方法和头部字段都没用固定死,可以允许开发人员自定义和扩充

应用广泛和跨平台

互联网发展以来,HTTP的应用从PC端到各种APP、小程序,从看新闻到看电视、小说等等都具有跨平台的优越性

3.2. HTTP1.1缺点

无状态和明文传输

无状态指的是每次发送HTTP请求,服务器都不知道是哪个客户,所以每次都需要验证,但是可以使用cookie来解决。明文传输最开始的目的是为了方便调试,一眼就可以看到传输过程的信息,但是这也带来了极大的安全隐患,账号信息随时有可能被窃听、拦截,数据等于是在裸奔,非常的不安全。

4. HTTP与HTTPS的区别

  • HTTP是超文本传输协议,信息是明文传输的,存在安全隐患。HTTPS则是在TCP和HTTP网络层之间加入了SSL/TSL安全协议进行加密传输,解决了HTTP的安全隐患问题。SSL就是我们建设网站通常用到的域名解析SSL证书
  • HTTP建立连接简单,TCP三次握手就可以进行报文传输。而HTTPS的话需要再三次握手之后还要进行SLL/TSL握手,进行加密以后才能报文传输
  • HTTP端口默认为80端口,HTTPS默认为443端口
  • HTTPS协议需要通过权威机构申请证书,来保证服务器的身份是可信的

5. HTTP1.1/HTTP2/HTTP3过程是如何变化的

5.1. HTTP1.1相比HTTP1.0:
  • 使用了TCP长连接改善了HTTP/1.0的短连接造成的额外性能开销,HTTP/1.0每次连接都需要发起TCP连接(三次握手),而且是串行请求,多次TCP连接和断开会造成性能浪费
  • 支持管道网络传输,只要首次请求发送出去,就可以进行第二个请求发送,不需要等起回来,减少整体响应时间

HTTP1.1缺陷:

  • 多次请求时同样的头部都要发送一次,当头部报文冗长时会造成不必要的性能浪费
  • 请求/响应头没有压缩就直接发送,头部越大延迟越大,能压缩的只有body部分
  • 服务器是按照请求顺序响应的,如果其中一个请求很慢,那么后续的请求都会被阻塞,这也就是队头阻塞效应

5.2. HTTP2 相比HTTP1.1
  • 进行头部压缩,如果多个请求头一致则消除相同的部分
  • 采用二进制的传输格式,服务器收到请求不需要将报文转为二进制而是直接解析,提高了传输的效率
  • HTTP2的数据包采用数据流的形式发送,同一个连接里面连续的数据包可能属于不同的回应,所以需要对每一个数据包做标记,标记它归属于那个回应,每个请求/回应的所有数据包被称为数据流
  • HTTP2是可以在同一个连接中并发多个请求,而不需要排队等候,移除了HTTP1.1的串行请求,因为是并发请求所以不会有队头阻塞问题

HTPP2缺陷:

当其中一个请求丢包的时候其他的请求都需要等待它完成,造成阻塞效果

5.3. HTTP3相对于HTTP2:

用UDP协议替换了TCP协议,在UDP协议里面不管哪个请求丢包都不会影响其他的请求,解决了阻塞问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记 | 软件工程02:软件工程概述

1 软件工程产生背景 1.1 历史发展 1960s的个体作坊式软件开发带来的问题 1.2 软件开发需要解决的问题 代码规模增长带来的影响: 1.3 软件开发面临的挑战 指挥信息系统中的软件:规模大、质量要求高 装备中嵌入式软件系统:规模大、质量要求…

调用smc为什么就能直接切换到ATF?

快速链接: . 👉👉👉Trustzone/TEE/安全 面试100问-目录 👈👈👈 付费专栏-付费课程 【购买须知】:联系方式-加入交流群 ----联系方式-加入交流群 个人博客笔记导读目录(全部) 背景 插播一个小插曲&#…

大数据在金融行业的深度应用与未来展望

一、引言 随着信息技术的迅猛发展,大数据已经成为推动金融行业创新的重要力量。从精准营销、个性化服务到风险管理和产品创新,大数据的应用正在不断重塑金融行业的格局。本文将深入探讨大数据在金融行业的深度应用,分析其特征特点、解决方案以及面临的挑战与机遇,并展望其…

深度学习 --- stanford cs231 编程作业(assignment1,Q2: SVM分类器)

stanford cs231 编程作业之SVM分类器 写在最前面: 深度学习,或者是广义上的任何学习,都是“行千里路”胜过“读万卷书”的学识。这两天光是学了斯坦福cs231n的一些基础理论,越往后学越觉得没什么。但听的云里雾里的地方也越来越多…

STM32——hal_SPI_(介绍)

SPI(串行外围设备接口)是一种高速的、全双工、同步的通信协议,通常用于短距离通信,尤其是在嵌入式系统中与各种外围设备进行通信。SPI接口由摩托罗拉公司推出,由于其简单和灵活的特性,它被广泛用于多种应用…

云计算百科:类型、服务与业务优势一网打尽

了解云计算的权威指南是至关重要的,掌握云计算的类型、服务、用途以及它们如何为组织带来好处尤为重要。 假设某公司的员工正在办公室工作,突然间火警响起,原来IT部门的主服务器机房着火了,所有服务器都受到了影响。这一消息引发…

【机器学习-09】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之高斯混合sklearn.mixture模块研究

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

Nginx配置详细解释:(3)http模块及server模块,location模块

目录 环境概述: http模块中的全局模块 1. root配置主要是对主web页面的路径访问。 2.server虚拟主机 2.1基于IP: 2.2基于域名: 3.alias别名 4.location匹配 5.access模块: 6.验证模块 7.自定义错误页面 8.日志存放位置…

图片裁剪与上传处理方案 —— 基于阿里云 OSS 处理用户资料

目录 01: 通用组件:input 构建方案分析 02: 通用组件:input 构建方案 03: 构建用户资料基础样式 04: 用户基本资料修改方案 05: 处理不保存时的同步问题 06: 头像修改方案流程分析 07: 通用组件:Dialog 构建方案分析 08: 通用组件&…

Transformer学习(4)

上篇文章完成了Transformer剩下组件的编写,因此本文就可以开始训练。 本文主要介绍训练时要做的一些事情,包括定义损失函数、学习率调整、优化器等。 下篇文章会探讨如何在多GPU上进行并行训练,加速训练过程。 数据集简介 从网上找到一份中…

双向链表的讲解与实现

双向链表的讲解与实现 一、双向链表的结构二、顺序表和双向链表的优缺点分析三、双向链表的实现(使用VS2022)1.初始化、销毁、打印、判空2.尾插尾删、头插头删3.查找、指定插入、指定删除 四、代码优化五、完整 List.c 源代码 一、双向链表的结构 带头”跟前面我们说的“头节点…

家政预约小程序13我的订单

目录 1 我的订单页面布局2 全部订单页面3 完善订单状态4 查询订单信息总结 现在我们已经完成了家政预约小程序主体功能的开发,包含服务的查看,在线预约已经登录等功能。预约之后就需要家政公司的客服进行派单,由服务人员进行上门服务。在小程…

gitlabcicd-k8s部署gitlab

一.安装准备环境 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-deploy.yaml nfs的ip是192.168.110.190 挂载目录是/data/data 注意所需要的目录需要创建:/data/data/gitlab/config ,/data/data/gitlab/logs ,/dat…

LeetCode刷题之HOT100之合并区间

雨下了一整天,中午早早就回去吃饭拿快递了,今天拿了很多快递。我的书回来啦哈哈,还有好多零食,爽歪歪啊,放在下面了,然后准备开始做题啦! 图一:左一是xh送我的,非常精彩…

JAVA小案例-99乘法表

JAVA小案例-99乘法表 今天学的一个小案例&#xff0c;主要是为了复习一下嵌套循环。 代码如下&#xff1a; public class Cheng {public static void main(String[] args) {int i;int j;for (i 1; i < 10; i) { //i<10和<9一个意思for (j 1; j < i 1; j) {…

CDH服务红,查看日志发现host有问题

看host后&#xff0c;发现里面节点ip都是127.0.0.1然后全部改成对应的ip&#xff0c; 1.在/etc/hosts里面全部加上了 ip以及对应的角色名称 2然后注释了127.0.0.1 hostname 3.然后重启所有的机器agent和server&#xff0c;在重新登录&#xff0c;点击重新部署。 重启agent sy…

STM32作业实现(八)触摸按键TPAD

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

echarts柱状图的背景动态效果

这里的动态效果实现原理&#xff0c;就是相当于柱状图多了一组同系列数据&#xff0c;其值与数组展示数据一致&#xff08;类似下图&#xff09; 即&#xff0c;柱形图的每一个柱体都有它对应的另外一个柱体 其中白色柱体要与展示柱体重合&#xff0c;效果类似与给柱体做背景…

Linux---网络相关配置

文章目录 目录 文章目录 前言 一.查看网络信息 二.修改网络配置信息 总结 前言 一台主机需要配置必要的网络信息&#xff0c;才可以连接到互联网&#xff0c;需要的配置网络信息包括IP&#xff0c;子网掩码&#xff0c;网关和DNS。 一.查看网络信息 查看IP信息可以通过ifcon…

用单链表实现集合

一、实验题目 &#xff08;1&#xff09;实验题目 用单链表实现集合 &#xff08;2&#xff09;问题描述 用有序单链表实现集合的判等、交、并和差等基本运算。 二、实验内容 &#xff08;1&#xff09;采用有序单链表存储集合&#xff1b; &#xff08;2&#xff09;实现交…