【计算机网络】| Http.*协议该知道的那些事儿 | 面经

news2024/10/5 22:22:20

本文章参考了很多文档文献整理成狮子自己喜欢的风格类型文字,主要有:
《图解网络-小林coding》、Github上面的《前端语音社群》,ChatGpt 3.5
大家有兴趣可以去找来看看,一起上岸!!!

目录

  • 面试官:什么是HTTP?
  • 面试官:说说 HTTP1.0/1.1/2.0 的区别?
  • 面试官:说说 HTTP 常见的请求头有哪些? 作用?
  • 面试官:说说HTTP 常见的状态码有哪些,适用场景?
    • 1xx
    • 2xx
    • 3xx
    • 4xx
    • 5xx
  • 面试官:HTTP 和 HTTPS 的区别?
  • 面试官:HTTPS 解决了 HTTP 的哪些问题?
  • 面试官:HTTPS 是如何建⽴连接的?其间交互了什么?
  • 面试官:说⼀下 GET 和 POST 的区别?

面试官:什么是HTTP?

主要抓住三方面:超文本 传输 协议

HTTP 协议是⼀个双向协议(两点之间)

eg:

浏览器是请求⽅ A ,百度⽹站就是应答⽅ B。双⽅约定⽤ HTTP 协议来通信,于是浏览器把请求数据发送给⽹站,⽹站再把⼀些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图⽚、视频了。

A——>B

A<——B 两点之间可以有很多个过程,但是这个过程中也得遵循Http协议

image-20230518094654769

答:超文本传输协议。是一个在网络世界里面专门在两点之间传输文字、图片、视频、音频等超文本数据约定和规范

面试官:说说 HTTP1.0/1.1/2.0 的区别?

答:

Http协议是基于TCP/IP协议的形式,

Http/1.0: 采用的是短连接并且是串行请求,这样客户端每次发送一个请求就需要建立一次TCP连接(三次握手),并且串行请求会进行很多无谓的TCP连接和断开,这样就造成了很大的通信负担。

Http/1.1:为了改善上述问题,Http/1.1采用了长连接的通信方式,也叫持久连接,即TCP连接默认不关闭,可以被多个请求复用,这样就有效减少了TCP的重复连接与断开造成的额外负担

Http/2.0:相比于前两个版本,Http/2.0性能上进行了很大的提升。

首先,采用二进制格式而非文本格式,解析起来更高效

其次它采用完全多路复用而非有序并阻塞的、只需一个连接即可实现并行;

还能进行服务器推送,允许服务端推送资源给客户端

面试官:说说 HTTP 常见的请求头有哪些? 作用?

HTTP头字段(HTTP header fields),是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分它们定义了一个超文本传输协议事务中的操作参数。

字段名说明示例
Accept能够接受的回应内容类型(Content-Types)Accept: text/plain
Accept-Charset能够接受的字符集Accept-Charset: utf-8
Accept-Language能够接受的回应内容的自然语言列表Accept-Language: en-US
Cache-Control用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令Cache-Control: no-cache
Connection该浏览器想要优先使用的连接类型Connection: keep-alive Connection: Upgrade
Cookie服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议CookieCookie: $Version=1; Skin=new;
Content-Length以 八位字节数组 (8位的字节)表示的请求体的长度Content-Length: 348
Content-Type请求体的 多媒体类型Content-Type: application/x-www-form-urlencoded
Host服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号Host: en.wikipedia.org:80 Host: en.wikipedia.org

面试官:说说HTTP 常见的状态码有哪些,适用场景?

1xx

代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束

常见的有:

  • 100(客户端继续发送请求,这是临时响应):这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应
  • 101:服务器根据客户端的请求切换协议,主要用于websocket或http2升级

2xx

代表请求已成功被服务器接收、理解、并接受

常见的有:

  • 200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回
  • 201(已创建):请求成功并且服务器创建了新的资源
  • 202(已创建):服务器已经接收请求,但尚未处理
  • 203(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源
  • 204(无内容):服务器成功处理请求,但没有返回任何内容
  • 205(重置内容):服务器成功处理请求,但没有返回任何内容
  • 206(部分内容):服务器成功处理了部分请求

3xx

表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向

常见的有:

  • 300(多种选择):针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择
  • 301(永久移动):请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
  • 302(临时移动): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
  • 303(查看其他位置):请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码
  • 305 (使用代理): 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理
  • 307 (临时重定向): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

4xx

代表了客户端看起来可能发生了错误,妨碍了服务器的处理

常见的有:

  • 400(错误请求): 服务器不理解请求的语法
  • 401(未授权): 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
  • 403(禁止): 服务器拒绝请求
  • 404(未找到): 服务器找不到请求的网页
  • 405(方法禁用): 禁用请求中指定的方法
  • 406(不接受): 无法使用请求的内容特性响应请求的网页
  • 407(需要代理授权): 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
  • 408(请求超时): 服务器等候请求时发生超时

5xx

表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生

常见的有:

  • 500(服务器内部错误):服务器遇到错误,无法完成请求
  • 501(尚未实施):服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
  • 502(错误网关): 服务器作为网关或代理,从上游服务器收到无效响应
  • 503(服务不可用): 服务器目前无法使用(由于超载或停机维护)
  • 504(网关超时): 服务器作为网关或代理,但是没有及时从上游服务器收到请求
  • 505(HTTP 版本不受支持): 服务器不支持请求中所用的 HTTP 协议版本

面试官:HTTP 和 HTTPS 的区别?

Https协议 = Http协议 + SSL/TLS 安全协议

  1. 因为Http协议传输的超文本信息是明文传输,存在安全风险问题;Https则解决了Http不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。
  2. 交互方式不同,HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
  3. 端口号不同,Http默认端口号为80,而Https默认端口号为443。
  4. Https协议需要向CA申请数字证书,来保证服务器的身份是可信的。

面试官:HTTPS 解决了 HTTP 的哪些问题?

  1. 窃听⻛险,Http协议仅支持明文传输,所有信息都暴露在大众眼球,信息很容易被窃听,⽐如通信链路上可以获取通信内容,⽤户号容易没。

  2. 篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染

  3. 冒充⻛险,⽐如冒充淘宝⽹站,⽤户钱容易没。

对应解决方案:

  1. 信息加密:交互信息⽆法被窃取。

  2. 校验机制:⽆法篡改通信内容,篡改了就不能正常显示。

  3. 身份证书:证明淘宝是真的淘宝⽹。

image-20230518110632963

面试官:HTTPS 是如何建⽴连接的?其间交互了什么?

  1. 客户端向服务端发送连接请求,包括支持的加密算法、协议版本等信息。
  2. 服务端回应客户端请求,确认使用的加密算法、协议版本等信息。
  3. 服务端将自己的公钥证书发送给客户端,客户端验证证书的合法性,并提取出服务端的公钥。
  4. 客户端生成随机数,使用服务端的公钥对该随机数进行加密,然后将加密后的随机数发送给服务端。
  5. 服务端使用自己的私钥对加密后的随机数进行解密,得到客户端随机数,然后生成一个新的随机数作为会话密钥。
  6. 客户端和服务端分别使用会话密钥加密和解密数据,确保通信过程中数据的安全性和完整性。

面试官:说⼀下 GET 和 POST 的区别?

Get ⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等

eg: 你打开我的⽂章,浏览器就会发送 GET 请求给服务器,服务器就会返回⽂章的所有⽂字及资源。

image-20230518135905555

POST ⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。

eg: 你在我⽂章底部,敲⼊了留⾔后点击「提交」(暗示你们留⾔),浏览器就会执⾏⼀次 POST 请求,把你的留⾔⽂字放进了报⽂ body ⾥,然后拼接好 POST 请求头,通过 TCP 协议发送给服务器。

image-20230518140128304

tips:安全和幂等性的概念

在 HTTP 协议⾥,所谓的安全是指请求⽅法不会「破坏」服务器上的资源

所谓的「幂等」,意思是多次执⾏相同的操作,结果都是「相同」的。

那么很明显 GET ⽅法就是安全且幂等的,因为它是「只读」操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

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

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

相关文章

leecode654——最大二叉树

leecode最大二叉树 &#x1f33b;题目要求&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的…

数据信托:可信的数据流通模式

数据信托&#xff1a;可信的数据流通模式 黄京磊, 李金璞, 汤珂 清华大学社会科学学院经济学研究所&#xff0c;北京 100084 摘要&#xff1a;数据信托可被视作一种新型的、可信的数据流通模式。数据信托不仅是一种保障信息安全的组织结构&#xff0c;还是一种增进数据要素市场…

DreamGPT - 基于生成式AI的灵感激发器

dreamGPT是第一个利用LLM大模型的幻觉&#xff08;hallucinations&#xff09;进行发散思维的灵感激发系统&#xff0c;目的是帮助你产生新的创新想法。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 LLM的幻觉通常被视为大模型的缺陷&#xff0c;但如果这一特性可以…

什么是KD树?

一、什么是KD树&#xff1f; KD树&#xff08;K-Dimensional Tree&#xff09;是一种用于高效处理多维数据的数据结构。它是二叉搜索树的一种变体&#xff0c;在每个节点上对数据进行分割&#xff0c;从而构建一个多维空间的层次结构。 因为KD树是基于二叉搜索树的特性构建的&…

【C++初阶】C++内存分配与动态内存管理

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 C内存分配与动态内存管…

端口扫描的CS木马样本的分析

序言 病毒、木马是黑客实施网络攻击的常用兵器&#xff0c;有些木马、病毒可以通过免杀技术的加持躲过主流杀毒软件的查杀&#xff0c;从而实现在受害者机器上长期驻留并传播。 CobaltStrike基础 Cobalt Strike简称CS&#xff0c;它是一款非常好用的渗透测试工具&#xff0c…

网络编程--select实现IO复用

何为复用 简单来说&#xff0c;复用就是在1个通信频道中传递多个数据的技术。 常见的复用方式有时分复用和频分复用。 时分复用&#xff1a;即在某一时间段内容&#xff0c;只允许传输一个数据。 频分复用&#xff1a;指的是在某一时间段可以传输多个“频率”不同的数据。 …

朱金宝:数据治理产品发展趋势及Datablau产品最新动态

在刚刚结束的2023数据治理新实践峰会上&#xff0c;Datablau数语科技联合创始人&CTO朱金宝先生分享了对数据治理产品发展趋势的深度思考及Datablau新产品预览&#xff0c;并在现场发布了两款最新工具。 以下是朱金宝先生的演讲实录&#xff0c;为了方便阅读&#xff0c;小…

商家中心之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

字符串String

目录 String 字符串比较 charAt 取数组中的值 案例 substring 案例&#xff1a;手机号加密​ StringBuilder StringBuilder提高效率原理图 StringJoiner 字符串拼接底层方法 String 创造方法 直接赋值通过new关键字 / 构造方法 字符串比较 equals &#xff1a;要求比…

chatgpt赋能Python-pycharm滚轮调大小

PyCharm使用技巧&#xff1a;滚轮调整代码大小提高工作效率 介绍 PyCharm是目前最受欢迎的Python开发IDE之一。然而&#xff0c;即使在使用PyCharm多年的开发者中&#xff0c;很多人都不知道如何使用滚轮来调整代码显示的大小。这在工作中可能会导致眼睛疲劳&#xff0c;降低…

Mysql案例

Mysql案例 1.分组查询排名优先的数据1.1 分组获取最新一条记录1.2 分组获取最新的两条数据 1.分组查询排名优先的数据 -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS user; CREATE TABLE user (id int(…

力扣82删除排序链表中的重复元素 II:思路分析+代码实现+方法总结(三指针法快慢指针法【双指针】递归法)

文章目录 第一部分&#xff1a;题目描述第二部分&#xff1a;代码实现2.1 三指针法2.2 快慢指针法&#xff08;双指针&#xff09;2.3 递归 第一部分&#xff1a;题目描述 &#x1f3e0; 链接&#xff1a;82. 删除排序链表中的重复元素 II - 力扣&#xff08;LeetCode&#xf…

简单快速的在openEuler22.03上部署openGauss2.10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装openEuler1.创建虚拟机2.安装openEuler系统 二、安装openGauss1.设置openGauss2.创建数据库用户并设置权限3.设置防火墙4.远程连接openGauss 总结 前言…

PyQt5桌面应用开发(15):界面动画

本文目录 PyQt5桌面应用系列界面动画PyQt5的动画框架QPropertyAnimationQAnimationGrouppyqtProperty与插值 一个例子代码代码解析 结论 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#…

【手机建站】安卓Termux+cpolar内网穿透,搭建外网可以访问的网站

文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 概述 Termux是一个Android终端仿真应用程序&#xff0c;用于在 Android 手机上搭建一个完整的Linux 环境&#xff0c;能够实现Linux下的许多基本操作&#xff0c;不需要root权限Termux就…

电脑格式化后数据恢复软件EasyRecovery16

EasyRecovery是一款由Kroll Ontrack公司开发的专业数据恢复软件&#xff0c;旨在帮助用户从各种数据丢失情况下恢复文件。无论是因为误删除、格式化、分区丢失、系统崩溃还是其他原因导致的数据丢失&#xff0c;EasyRecovery都具有强大的恢复功能。 EasyRecovery提供了多种恢复…

什么是 Git 的 cherry-pick?

官方解析 Git 的 cherry-pick 是一种将指定的提交&#xff08;commit&#xff09;应用到当前分支的操作。它可以帮助我们将某个分支上的某次提交复制到另一个分支上&#xff0c;而无需将整个分支合并过来。 通常&#xff0c;我们在使用 Git 进行版本控制时&#xff0c;会在不…

JAVA-Activiti 7与达梦、人大金仓兼容-修改源码包(1)

目录 第一步,下载源码包 第二步,修改源码内容 1.1进行部分源码包修改 1.1.1 在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl&#xff0c;增加成员变量。 1.1.2 修改org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl 类的getDefaultDatabase…

UML类图画法及其关系

UML类图画法及其关系 本文主要是介绍 UML类图画法及其关系&#xff0c;方便今后温习&#xff01;&#xff01;&#xff01; 一、类之间的关系汇总 泛化&#xff08;Generalization&#xff09;实现&#xff08;Realization&#xff09;关联&#xff08;Association&#xff…