面试之HTTP

1.HTTP与HTTPS的区别

  • HTTP运行在TCP之上;HTTPS是运行在SSL之上,SSL运行在TCP之上
  • 两者使用的端口不同:HTTP使用的是80端口,HTTPS使用的是443端口
  • 安全性不同:HTTP没有加密,安全性较差;HTTPS有加密机制,安全性较好
  • 两者消耗资源大小不一:HTTP消耗的资源较少,HTTPS由于需要加密处理,所以消耗的资源更多

2.HTTP中POST和GET方法的区别

相同点:两者都是HTTP协议中的方法

不同点:

  • get方法是用来从服务器上获取资源;post是用来向服务器提交数据的
  • get方法的参数是通过URL进行传递的;post方法的参数存放在请求头或者消息体中进行传递的
  • get方法相比于post方法更不安全,因为请求参数存在于url中,暴露在外
  • get方法在url中传递的参数是有长度限制的(实际上HTTP协议本身对长度没有限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制。

3.Cookie和Session的区别

  • 用范围不同:cookie保存在客户端浏览器;session保存在服务器
  • 存取方式不同:cookie只能保存ASCII,session可以存储任意类型的数据
  • 有效期不同:cookie可设置为长时间保存,比如我们使用的默认登录功能;session一般有时间限制,客户端关闭或者session超时都会失效
  • 存储大小不同:单个cookie保存数据大小不能超过4k;session存储数据可远远高于cookie
  • 安全性不同:cookie将信息存储在客户端,容易遭到非法获取;session信息存储在服务器,安全新相对来说高一些。

4.HTTP常见的状态码

常见的状态码:

  • 200:服务器处理请求成功。
  • 301(永久重定向):浏览器请求的资源已经永久移动到了一个新的URL地址,浏览器会自动将请求重定向到新的URL地址
  • 302(临时重定向):请求的资源只是暂时移动到了一个新的URL地址,浏览器会在下一次请求时再次访问原始URL地址。
  • 400:客户端请求有语法错误,不能被服务器理解
  • 403:服务器收到请求,但是没有权限,服务器拒绝提供服务
  • 404(未找到):服务器找不到请求的资源
  • 500(服务器内部错误):服务器错误,无法完成请求

状态码开头代表的类型:

5.对称加密和非对称加密

对称加密:对称加密指的是加密和解密都是同一个密钥。但是这种加密方式,如果被别人获取密钥,就可以直接获取解密内容,安全性有待提升。

非对称加密:非对称加密用到两个密钥,一个公钥一个私钥。每个客户都拿着一把公钥,服务器拿着一把私钥。公钥加密私钥可以解密;私钥加密公钥可以解密,但是公钥加密公钥不能解密。

区别:对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.。

6.HTTPS的工作原理

preview

  1. 客户端请求HTTPS 网址,然后连接到服务器的443端口(HTTPS的默认端口)
  2. 采用HTTPS的服务器必须要有一套数字CA证书,颁发证书的时候会产生一个公钥和私钥。私钥由服务端自己保存,不可泄漏,公钥则是附带在证书的信息中,可以公开的。证书本身也附带了一个电子签名,这个签名来验证证书的真实性和完整性,可以防止证书被篡改
  3. 服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量信息,比如证书颁发机构信息,公司信息和证书有效期等
  4. 客户端解析证书并对其进行验证,如果证书是不可信机构颁发的,或者证书中的域名与实际域名不一致的,或者证书已经过期,就会像访问者显示一个警告,与其选择是否继续通信         如果证书没有问题,客户端会从服务器证书中取出服务器的公钥A,然后客户端会生成一个随机码KEY,并使用公钥A将其加密
  5. 客户端把加密后的随机码KEY发送给服务器,最为后面对称加密的密钥
  6. 服务器在收到随机码KEY之后会使用是私钥B进行解密,经过以上步骤,客户端和服务器终于建立了安全的连接,完美解决了对称加密密钥泄露的问题,后续可以使用对称加密进行通信了
  7. 服务器使用密钥(随机码KEY)对数据进行对称加密并且发送给客户端,客户端使用相同的密钥(随机码KEY)进行解密
  8. 双方使用对称加密的方式传输数据

7.在浏览器中输入www.baidu.com后执行的全过程

  1. 域名解析(将域名www.baidu.com变为ip地址):浏览器首先搜索自己的DNS缓存(维护一张域名与IP的对应表),若没有则搜索操作系统的DNS缓存,若没有则搜索操作系统的hosts文件。若都没有找到,则找TCP/IP参数设置中的首选DNS服务器,即本地的DNS服务器(递归查询),本地域名服务器查找自己的DNS缓存,如果没有,则进行迭代查询。将本地服务器的IP返回给操作系统,同时缓存IP
  2. 使用三次握手机制建立TCP连接,浏览器会以一个随机端口(1024-65535)向服务端的web程序80端口发起TCP连接
  3. 建立TCP连接之后发起HTTP请求
  4. 服务器响应HTTP请求,客户端得到HTML代码。服务器web应用程序收到HTTP请求之后,就开始处理请求,处理完成之后就返回给浏览器HTML文件
  5. 浏览器解析HTML代码,并请求HTML中的资源
  6. 浏览器对页面进行渲染,呈现给用户 

8.HTTP/1.0和HTTP/1.1有什么区别

HTTP/1.0 和 HTTP/1.1 对比

  • 连接方式:HTTP/1.0为短连接,HTTP/1.1支持长连接
  • 状态响应码:HTTP/1.1中新加入了大量的状态码,光是错误码就新增了24种。比如100——在请求大资源时预热,206——范围请求的标识码,409——请求与当前资源规定冲突。
  • 缓存机制:在HTTP/1.0中主要使用Hearder里的If-Modified-Since,Expires 来做为缓存判断的标准,HTTP/1.1则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
  • 带宽:HTTP/1.0中存在一些浪费带宽的现象,例如客户端某个对象的一部分,而服务器却将整个对象都送过来,并且不支持断点续传功能;HTTP/1.1则在请求头引入了range头域,它允许请求资源的某个部分,返回码为206,这样就方便开发者自由的选择以便于充分利用带宽和连接
  • Host头处理:HTTP/1.1引入了Host头字段,允许在统一IP地址上托管多个域名,从而支持虚拟主机的功能。而HTTP/1.0没有Host字段,无法实现虚拟主机

9.HTTP/1.1和HTTP/2.0有什么区别

HTTP/1.0 和 HTTP/1.1 对比

  •  IO多路复用:HTTP/2.0在同一连接上可以同时传输多个请求和响应。这使得HTTP/2.0在处理多个请求时更加高效,减少了网络延迟和提高了性能。HTTP/1.1则使用串行的方式,每个请求和响应都需要独立的连接。
  • 二进制帧:HTTP/2.0使用二进制帧进行数据传输,二进制帧更加紧凑和高效,减少了数据的传输量和带宽消耗。HTTP/1.1则使用文本格式的报文
  • 头部压缩:HTTP/1.1支持body压缩,不支持Header压缩;HTTP/2.0支持对Header压缩,减少了网络开销
  • 服务器推送:HTTP/2.0支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少客户端的请求次数和延迟。HTTP/1.1需要客户端自己发送请求来获取相关资源

10.HTTP/2.0和HTTP/3.0有什么区别

HTTP/2.0 和 HTTP/3.0 对比

  • 传输协议:HTTP/2.0是基于TCP协议实现的,HTTP/3.0 新增了 QUIC(Quick UDP Internet Connections) 协议来实现可靠的传输,提供与TLS/SSL相当的安全性,具有较低的连接和传输延迟(可以将QUIC看作是UDP 的升级版本,在其基础上新增了很多功能比如加密,重传等)
  • 连接建立:HTTP/2.0需要经过经典的TCP三次握手过程。HTTP/3.0由于QUIC特性,建立连接的时间远远小于HTTP/2.0建立的时间
  • 队头阻塞:HTTP/2.0多请求复用一个TCP连接,一旦发生丢包,就会阻塞所有的HTTP请求;由于QUIC的特性,HTTP/3.0在一定程度上解决了队头阻塞问题,一个连接建立多个不同的数据流,这些数据流之间互不影响,某个数据流发生丢包了,其数据流不影响
  • 错误恢复:HTTP/3.0具有更好的错误恢复机制,当出现丢包,延迟等网络问题时,可以更快的进行恢复和重传。HTTP/2.0还是依赖于TCP的错误恢复和重传
  • 安全性:HTTP/2.0和HTTP/3.0对于安全都有很高的要求,支持加密通信,但是实现方式不同。HTTP/2.0使用TLS协议进行加密,而HTTP/3.0基于QUIC协议,包含了内置的加密和验证身份机制,可以提供更强的安全性。

11.DNS域名系统

DNS域名系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议,DNS解决的是域名和IP地址映射问题

DNS:域名系统

 在实际的应用中,有一种情况可以不必动用DNS就可以获知域名和IP地址的映射。浏览器会在本地维护一个hosts列表,一般来说浏览器要查看访问的域名是否在hosts表中,如果有的话,直接提取对应的IP地址即可,如果本地hosts列表不存在,此时DNS就开始工作了。

目前 DNS 的设计采用的是分布式、层次数据库结构,DNS 是应用层协议,基于 UDP 协议之上,端口为 53 。

DNS服务器自底向上可以一次分为以下几个层级(所有DNS服务器都属于以下四个类别别):

  • 根DNS服务器:根DNS服务器提供TLD服务器的IP地址。目前世界上只有13组根服务器,我国境内目前没有
  • 顶级域DNS服务器(TLD服务器):顶级域是指域名的后缀,如com,org,net,edu等,国家也有自己的顶级域,如uk,fr,ca等,TLD服务器提供了权威DNS服务器的IP地址
  • 权威DNS服务器:在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址
  • 本地DNS服务器:每个ISP(互联网服务供应商)都有一个自己的本地DNS服务器。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS层次结构中

各域名的层级关系类似于一个树状结构:


DNS 树状结构

DNS的工作流程

  1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
  3. 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
  4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
  5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
  6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
  7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

至此DNS域名系统的一次完整的工作流程结束。

 

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

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

相关文章

vue 简单实验 自定义组件 传参数 props

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><todo-item v-bind:todo"todo1"></todo-item> </div> <script> const ListR…

Linux虚拟机安装(Ubuntu 20)

最近这段时间使用VMWare安装了一下Ubuntu版本的Linux虚拟机&#xff0c;在这里记录一下安装时参考的文章以及需要注意的细节 参考链接&#xff1a; VMware虚拟机下安装Ubuntu20.04&#xff08;保姆级教程&#xff09; 一、安装VMWare 下载链接&#xff1a;VMware Workstatio…

Maven解析

目录 Maven的概念 Pom 项目坐标 仓库 Maven环境搭建 安装jdk 配置maven 配置本地仓库地址 配置阿里云 maven 镜像仓库&#xff0c;下载速度更快 在idea中配置maven ​编辑 pom中名词解释 Maven命令 Maven的概念 Maven 是 Apache 软件基金会的一个开源项目,是一个…

从头开始:将新项目上传至Git仓库的简易指南

无论您是一个经验丰富的开发者还是一个刚刚起步的新手&#xff0c;使用Git来管理您的项目是一个明智的选择。Git是一个强大的版本控制系统&#xff0c;它可以帮助您跟踪项目的变化、合并代码以及与团队成员协作。在本文中&#xff0c;我们将为您提供一步步的指南&#xff0c;教…

RTSP/Onvif视频服务器EasyNVR安防视频云服务平台出现崩溃并重启的情况解决方案

EasyNVR安防视频云服务平台的特点是基于RTSP/Onvif协议将前端设备统一接入&#xff0c;在平台进行转码、直播、处理及分发&#xff0c;在安防监控场景中&#xff0c;EasyNVR可实现实时监控、云端录像、云存储、告警、级联等视频能力&#xff0c;极大满足行业的视频监控需求。 有…

【AI】即使AI 时代,程序员也无需焦虑

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

数组分割(2023省蓝桥杯)n种讨论 JAVA

目录 1、题目描述&#xff1a;2、前言&#xff1a;3、动态规划&#xff08;bug)&#xff1a;3、递归 剪枝&#xff08;超时&#xff09;&#xff1a;4、数学&#xff08;正解&#xff09;&#xff1a; 1、题目描述&#xff1a; 小蓝有一个长度为 N 的数组 A [A0, A1,…, AN−…

c++ qt--页面布局(第五部分)

c qt–页面布局&#xff08;第五部分&#xff09; 一.页面布局 在设计页面的左侧一栏的组件中我们可以看到进行页面布局的一些组件 布局组件的使用 1.水平布局 使用&#xff1a;将别的组件拖到水平布局的组件中即可&#xff0c;可以选择是在哪个位置 2.垂直布局 使用&…

敏捷研发管理软件及敏捷管理流程

Scrum中非常强调公开、透明、直接有效的沟通&#xff0c;这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求&#xff0c;故事&#xff0c;任务之间的流转状态&#xff0c;可以使团队成员更加快速适应敏捷开发流程。 …

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载

文章目录 一、Caffe模型加载接口二、TensorFlow模型加载接口三、TensorFlowLite模型加载接口四、ONNX模型加载五、ONNX模型加载六、PyTorch模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、TensorFlowLite、ONN…

互联网医院成品功能你有哪些看法?

随着信息化的飞速发展&#xff0c;医疗领域信息化程度日益加深&#xff0c;医院对于信息化的自身需求越来越高&#xff0c;由此也推动了医院信息化的快速发展。而即时医疗信息服务能够解决普通老百姓医疗信息匮乏、花大钱看小病、就医不及时等基本问题。通过智能手机、平板电脑…

C++信息学奥赛1130:找第一个只出现一次的字符

这段代码的功能是找出输入字符串中第一个重复出现的字符&#xff0c;并输出该字符。 解析注释后的代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {string arr;getline(cin, arr); int a0;for(int i0;i<arr.length();i){for(int j0;j…

lvs-dr模式+keepalived

一&#xff0c;keepalived概述 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色的服务器&am…

枚举和反射

枚举 枚举 枚举是一种特殊的类&#xff0c;它可以有自己的属性、方法和构造方法。 两种枚举的方法 自定义枚举 a.将构造器私有化&#xff0c;防止外部直接new b.去掉set方法&#xff0c;防止属性被修改 c.在内部直接创建固定的对象 通过类名直接去访问 关键字枚举 用…

聊聊敏捷实践的“个体与交互”

这是鼎叔的第七十二篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》&#xff0c;星标收藏&#xff0c;大量原创思考文章陆续推出。 敏捷宣言有重要的一句话&#xff1a;个体和交互胜过过程和工具。作为工程师&#xff0c;…

Pycharm通过SSH配置centos上Spark环境

直接在shell进行pyspark进行编程&#xff0c;程序没有办法写得太长&#xff0c;而且我们希望能够实现一个及时给出结果的编程环境&#xff0c;可以使用pycharm连接centos上的spark&#xff0c;进行本地编程&#xff0c;同步到centos系统中运行程序&#xff0c;并把结果返回pych…

Spring Boot 整合MyBatis-Plus

&#x1f600;前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…

构建 NodeJS 影院预订微服务并使用 docker 部署(03/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 你好社区&#xff0c;这是&#x1f3f0;“构建 NodeJS 影院微服务”系列的第三篇文章。本系列文章演示了…

Qt应用开发(基础篇)——纯文本编辑窗口 QPlainTextEdit

一、前言 QPlainTextEdit类继承于QAbstractScrollArea&#xff0c;QAbstractScrollArea继承于QFrame&#xff0c;是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…

怎么把PDF转成Word?需要注意什么事项?

PDF是一种常见的文档格式&#xff0c;但是与Word文档不同&#xff0c;PDF文件通常不能直接编辑。如果您想编辑PDF文件中的文本&#xff0c;或者想将PDF文件转换为Word文档&#xff0c;下面我们就来看一看把PDF转成Word有哪些方法和注意事项。 PDF转Word工具 有许多将PDF转换为…