当前位置: 首页 > news >正文

计算机网络-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常见面试题

目录 1. HTTP是什么?2. HTTP常见的状态码?3. HTTP 常见的字段有哪些?4. GET和POST有什么区别:5. GET 和POST方法都是安全和幂等的吗?6. HTTP缓存技术7. HTTP/1.1相比HTTP/1.0提高了什么性能?8. HTTP/2做了什…...

LNMP搭建Discuz和Wordpress

1、LNMP L:linux操作系统 N:nginx展示前端页面web服务 M:mysql数据库,保存用户和密码,以及论坛相关的内容 P:php动态请求转发的中间件 数据库的作用: 登录时验证用户名和密码 创建用户和密码 发布和…...

java中的构造器

Java 中的构造器(也称为构造方法)是一种特殊的方法,用于初始化对象的状态。在创建 Java 类的实例时,构造器会被自动调用。 构造器的定义: 构造器的名称必须与类名完全相同。构造器没有返回值类型,甚至不包括…...

机器学习筑基篇,​Ubuntu 24.04 快速安装 PyCharm IDE 工具,无需激活!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Ubuntu 24.04 快速安装 PyCharm IDE 工具 描述:虽然在之前我们安装了VScode,但是其对于使用Python来写大型项目以及各类配置还是比较复杂的,所以这里我们还是推…...

从0开始基于transformer进行股价预测(pytorch版本)

目录 数据阶段两个问题开始利用我们的代码进行切分 backbone网络训练效果 感觉还行,没有调参数。源码比较长,如果需要我后续会发(因为太长了!!) 数据阶段 !!!注意&#…...

【多GPU训练方法】

一、数据并行 这是最常用的方法。整个模型复制到每个GPU上。训练数据被均匀分割,每个GPU处理一部分数据。所有GPU上的梯度被收集并求平均。通常使用NCCL(NVIDIA Collective Communications Library)等通信库实现。参数更新 使用同步后的梯度…...

2024年PMP考试备考经验分享

PMP是项目管理领域最重要的认证之一,本身是IT行业比较流行的证书,近几年在临床试验领域也渐渐流行起来,是我周围临床项PM几乎人手一个的证书。 考试时间:PMP认证考试形式为180道选择题,考试时间为3小时50分。 考试计划&#xff…...

MT3046 愤怒的象棚

思路: a[]存愤怒值;b[i]存以i结尾的,窗口里的最大值;c[i]存以i结尾的,窗口里面包含✳的最大值。 (✳为新大象的位置) 例:1 2 3 4 ✳ 5 6 7 8 9 则ans的计算公式b3b4c4c5c6b7b8b9…...

深入了解代理IP常见协议:区别与选择

代理服务器在网络使用中扮演着重要的角色,是您设备和互联网之间的中间层。它不仅可以增强网络访问的安全性和隐私保护,还可以提供许多灵活的应用。使用代理时,不同的协议类型对数据交换具有不同的规则和特征。常见的代理协议包括HTTP代理、HT…...

【Linux 线程】线程的基本概念、LWP的理解

文章目录 一、ps -L 指令🍎二、线程控制 一、ps -L 指令🍎 🐧 使用 ps -L 命令查看轻量级进程信息;🐧 pthread_self() 用于获取用户态线程的 tid,而并非轻量级进程ID;🐧 getpid() 用…...

Dify中的工具

Dify中的工具分为内置工具(硬编码)和第三方工具(OpenAPI Swagger/ChatGPT Plugin)。工具可被Workflow(工作流)和Agent使用,当然Workflow也可被发布为工具,这样Workflow(工…...

在Visutal Studio 2022中完成D3D12初始化

在Visutal Studio 2022中完成DirectX设备初始化 1 DirectX121.1 DirectX 简介1.2 DirectX SDK安装2 D3D12初始化2.1 创建Windwos桌面项目2.2 修改符合模式2.3 下载d3dx12.h文件2.4 创建一个异常类D3DException,定义抛出异常实例的宏ThrowIfFailed3 D3D12的初始化步骤3.1 初始化…...

MobaXterm工具

MobaXterm 是一个增强型的 Windows 终端。其为 Windows 桌面提供所有重要的远程网络终端工具(如 SSH、X11、RDP、VNC、FTP、SFTP、Telnet、Serial、Mosh、WSL 等),和 Unix 命令(如 bash、ls、cat、sed、grep、awk、rsync 等&#…...

二分图练习

对于二分图我们可以用染色法 #include<bits/stdc.h> using namespace std;#define int long long const int N 2e65; int e[N],ne[N],h[N],idx 0; int colo[N]; int num 0;void add(int x,int y){e[idx] y;ne[idx] h[x];h[x] idx; } void dfs(int nod,int c){colo…...

创新设计策略:提升大屏幕可视化设计效果的关键方法

随着科技的不断发展和数据量的快速增长&#xff0c;数据可视化大屏在各个行业中的应用越来越广泛&#xff0c;可以帮助人们更好地理解和分析数据&#xff0c;可视化大屏设计也因此成了众多企业的需求。但很多设计师对可视化大屏设计并不了解&#xff0c;也不知道如何制作可视化…...

论文 | Chain-of-Thought Prompting Elicits Reasoningin Large Language Models 思维链

这篇论文研究了如何通过生成一系列中间推理步骤&#xff08;即思维链&#xff09;来显著提高大型语言模型进行复杂推理的能力。论文展示了一种简单的方法&#xff0c;称为思维链提示&#xff0c;通过在提示中提供几个思维链示例来自然地激发这种推理能力。 主要发现&#xff1…...

[机器学习]-人工智能对程序员的深远影响——案例分析

机器学习和人工智能对未来程序员的深远影响 目录 机器学习和人工智能对未来程序员的深远影响1. **自动化编码任务**1.1 代码生成1.2 自动调试1.3 测试自动化 2. **提升开发效率**2.1 智能建议2.2 项目管理 3. **改变编程范式**3.1 数据驱动开发 4. **职业发展的新机遇**4.1 AI工…...

AI学习环境 没有更好的替代 - (Google)Drive + Colab

在开始正题前&#xff0c;请容许我做一番回顾&#xff0c;并夹带一点点私货&#xff08;谷歌扛旗的开源精神还没有死&#xff0c;并且会是未来的举足轻重的力量&#xff09; 卧龙凤雏&#xff0c;一时瑜亮。一切的缘起应该是世纪初的门户网站乱战。 彼时&#xff0c;谷歌是从…...

【观成科技】Websocket协议代理隧道加密流量分析与检测

Websocket协议代理隧道加密流量简介 攻防场景下&#xff0c;Websocket协议常被用于代理隧道的搭建&#xff0c;攻击者企图通过Websocket协议来绕过网络限制&#xff0c;搭建一个低延迟、双向实时数据传输的隧道。当前&#xff0c;主流的支持Websocket通信代理的工具有&#xf…...

DangerWind-RPC-framework---三、服务端下机

当一台机器下线时&#xff0c;面临很多问题&#xff1a;如何将其从注册中心下线&#xff1f;如何清理释放资源&#xff1f;客户端拉取服务列表时也使用了本地缓存&#xff0c;如何及时更新本地缓存&#xff1f; 服务端机器的优雅下线需要使用ShutdownHook&#xff0c;这相当于添…...

基于Make的c工程No compilation commands found报错

由于安装gcc时只安装了build-essential&#xff0c;没有将其添加到环境变量中&#xff0c;因此打开Make工程时&#xff0c;CLion会产生如下错误&#xff1a; 要解决这个问题&#xff0c;一个方法是将GCC添加到环境变量中&#xff0c;但是这个方法需要修改至少两个配置文件&…...

c++:面向对象的继承特性

什么是继承 (1)继承是C源生支持的一种语法特性&#xff0c;是C面向对象的一种表现 (2)继承特性可以让派生类“瞬间”拥有基类的所有&#xff08;当然还得考虑权限&#xff09;属性和方法 (3)继承特性本质上是为了代码复用 (4)类在C编译器的内部可以理解为结构体&#xff0c;派…...

skywalking-2-客户端-php的安装与使用

skywalking的客户端支持php&#xff0c;真的很棒。 官方安装文档&#xff1a;https://skywalking.apache.org/docs/skywalking-php/next/en/setup/service-agent/php-agent/readme/ 前置准备 本次使用的php版本是8.2.13: php -v PHP 8.2.13 (cli) (built: Nov 21 2023 09:5…...

图文讲解IDEA如何导入JDBC驱动包

前言 学习JDBC编程,势必要学会如何导入驱动包,这里笔者用图文的方式来介绍 视频版本在这里 50秒教你怎么导入驱动包然后进行JDBC编程的学习_哔哩哔哩_bilibili 忘记录音频了,大伙凑合着看 下载驱动包 https://mvnrepository.com/artifact/mysql/mysql-connector-java 去中…...

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int fun main(args: Array<String>) {var any1: Any?any1 nullval n1 any1 as? Int ?: -2024println(n1)kotlin.runCatching {var any2: Any?any2 nullval n2 any2 as Intprintln(…...

scrapy写爬虫

Scrapy是一个用于爬取网站数据并提取结构化信息的Python框架 一、Scrapy介绍 1.引擎&#xff08;Engine&#xff09; – Scrapy的引擎是控制数据流和触发事件的核心。它管理着Spider发送的请求和接收的响应&#xff0c;以及处理Spider生成的Item。引擎是Scrapy运行的驱动力。…...

Mybatis study

一、Mybatis Plus mybatis-plus指定实体类字段不查询 加标签 TableField(exist false) Spring Data Jpa学习 干我们这行&#xff0c;啥时候懈怠&#xff0c;就意味着长进的停止&#xff0c;长进的停止就意味着被淘汰&#xff0c;只能往前冲&#xff0c;直到凤凰涅槃的一天&am…...

【论文速读】《面向深度学习的联合消息传递与自编码器》

这篇文章来自华为的渥太华无线先进系统能力中心和无线技术实验室&#xff0c;作者中有大名鼎鼎的童文。 一、自编码架构的全局收发机面临的主要问题 文章对我比较有启发的地方&#xff0c;是提到自编码架构的全局收发机面临的主要问题&#xff1a; 问题一&#xff1a;基于随…...

防御---001

一、实验拓扑二、要求 1&#xff0c;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00 - 18:00)可以访问&#xff0c;生产区的的设备全天可以访问. 2&#xff0c;生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMZ…...

DNS 杂谈

一、定义 DNS&#xff08;Domain Name System&#xff09;&#xff0c;域名系统&#xff0c;该系统记录域名和Ip地址的相互映射关系。用户访问互联网时&#xff0c;通过域名地址得到对应的IP地址&#xff0c;这个过程称为域名解析。DNS运行于UDP协议之上&#xff0c;使用的端口…...

集团网站建设服务公司/成都seo公司

package work1;import java.util.Scanner;public class Test {//切记&#xff0c;类名一定要大写&#xff0c;这里我出现了一个错误&#xff0c;就是car类名小写&#xff0c;/*** param args*/public static void main(String[] args) {// TODO Auto-generated method stubcar …...

旅游论坛网站建设/南京今天重大新闻事件

开源「高逼格」简历例句&#xff0c;看你有没有中招&#xff1f; 星期天下午&#xff0c;在浏览 GitHub 的时候&#xff0c;发现一个非常有意思的开源项目&#xff0c;是由 ResumeJob 整理贡献的&#xff0c;那就是一份程序员简历上常常使用的介绍和描述技能的例句。感觉写的很…...

学生网页设计成品网站/千锋教育培训怎么样

DELL T420塔式服务器RAID配置服务代码为&#xff1a;8849763073【&#xff01;&#xff01;RAID卡配置与OS安装前请备份好自己的数据&#xff01;&#xff01;】 1.服务器RAID卡配置开机看到CTRLR的提示后及时按下CTRLR进到阵列卡配置界面进去之后光标默认就在阵列卡型号上比如…...

安卓开发技术/seo站长工具综合查询

一、数据类型1、列表&#xff1a;# 列表中的每个元素都是可变的# 列表的元素是有序的&#xff0c;# 列表用中括号表示ab [ ]# ab.insert(‘位置’&#xff0c;‘元素‘) ## 在指定位置插入某个元素# ab.append() # 在末尾增加元素# ab.remove(1) # 删除‘1‘这个元素# ab.po…...

做网站要不要营业执照/最近军事新闻热点大事件

郑重声明&#xff1a;本文纯属Fans同学的个人见解&#xff0c;仅供参考&#xff0c;欢迎拍砖。 软林至尊&#xff0c;Fans同盟。号令天下&#xff0c;莫敢不从。 Fans 1.老师教--这里的老师指大学教师。 优点&#xff1a;现场讲课&#xff0c;不懂可以问。 缺点&#xff1a;理…...

wordpress 末班/nba最新交易

2019独角兽企业重金招聘Python工程师标准>>> 我们想要添加一个文件到Cocos2d-x的目录下&#xff0c;一般有两种方式&#xff1a; 第一种 在导航栏点击右键&#xff0c;选择Add files to 第二种 直接将文件拖拽进来。 但是无论哪种方式&#xff0c;我们都会面临一个&…...