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

HTTP常见面试题(小林coding版总结)

1:HTTP基本概念 超文本 传输 协议

2:常见状态码 1xx 提示信息 2xx 成功 3xx 重定向 4xx 客户端错误 5xx 服务器错误

3:HTTP常见的字段 host 指定服务器的域名 Content-Length 回应的数据长度 Connection 长连接(Keep-Alive)
Content-Type 响应数据格式(text/html; Charset=utf-8) Content-Encoding 数据压缩格式(gzip)

4:get和post的区别 get安全、幂等、可被缓存 post不安全(请求的参数只允许 ASCII 字符),不幂等,(大部分实现)不可缓存
 RFC规范 POST的语义是根据请求负荷(报文body)对指定的资源做出处理 
 GET请求可以带body吗? 任何请求都可以带 body的 只是因为RFC规范定义的GET请求是获取资源,所以根据这个语义不需要用到body

5:HTTP缓存技术
强制缓存:强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。
响应头部相关参数:200 状态码,但在 size 项中标识的是from disk cache,Cache-Control和Expires表示资源在客户端缓存的有效期
协商缓存:就是与服务端协商之后,通过协商结果来判断是否使用本地缓存。
响应头部相关参数:304状态码 If-Modified-Since和Last-Modified(资源最后修改时间),If-None-Match和ETag(唯一标识响应资源)

6:HTTP/1.1特性
优点:简单(HTTP 基本的报文格式就是 header + body,头部信息也是 key-value) 
    灵活和易于扩展(各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,允许开发人员自定义和扩充) 
    应用广泛和跨平台(从台式机的浏览器到手机上的各种 APP)
缺点:
无状态双刃剑(好:服务器不用记忆HTTP的状态,减轻服务器的负担。坏:没有记忆能力,完成有关联性的操作时会非常麻烦),解决:cookie
明文传输双刃剑(好:方便阅读。坏:被抓包,信息裸奔)
不安全(通信使用明文,不验证通信方的身份,无法证明报文的完整性),解决:HTTPS
性能:
长连接(一次TCP连接,多次请求响应)
管道网络传输(连续发送请求,不必等其响应。服务器必须按照接收请求的顺序发送对这些管道化请求的响应。HTTP/1.1管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞)
队头阻塞(当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据)这也是后续的HTTP/2和HTTP/3在优化HTTP的性能的方向

7:HTTP和HTTPS的区别 HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
HTTP 默认端口号是 80,HTTPS 默认端口号是 443
HTTPS 是如何解决上面的三个风险的?(窃听风险、篡改风险、冒充风险)
混合加密(对称加密和非对称加密结合,密钥)、摘要算法+数字签名(哈希算法+非对称双向加解密)、数字证书(身份验证,CA 数字证书认证机构)

8:HTTPS是如何建立连接的?其间交互了什么?HTTPS 的应用数据是如何保证完整性的?(略)https://xiaolincoding.com/network/2_http/http_interview.html#https-%E6%98%AF%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%E7%9A%84-%E5%85%B6%E9%97%B4%E4%BA%A4%E4%BA%92%E4%BA%86%E4%BB%80%E4%B9%88

9:HTTPS 一定安全可靠吗?
HTTPS 协议本身到目前为止还是没有任何漏洞的,即使你成功进行中间人攻击,本质上是利用了客户端的漏洞(用户点击继续访问或者被恶意导入伪造的根证书),并不是 HTTPS 不够安全
如何避免被中间人抓取数据?通过 HTTPS 双向认证

10:HTTP/1.1、HTTP/2、HTTP/3 演变
HTTP/1.1
改进:长连接的方式改善了短连接造成的性能开销、支持管道网络传输 减少整体的响应时间
瓶颈:请求头部未经压缩就发、发送冗长的首部、队头阻塞、没有请求优先级控制、请求只能从客户端开始 服务器只能被动响应
HTTP/2
改进:头部压缩、二进制格式、并发传输、服务器主动推送资源
缺点:HTTP/2 通过 Stream 的并发能力,解决了 HTTP/1 队头阻塞的问题,看似很完美了,但是 HTTP/2 还是存在“队头阻塞”的问题,只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层
HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。
HTTP/3
改进:HTTP/2 队头阻塞的问题是因为 TCP,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
QUIC有以下3个特点 
:无队头阻塞(当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响,因此不存在队头阻塞问题)
:更快的连接建立(QUIC 内部包含了 TLS, QUIC 使用的是 TLS/1.3,因此仅需 1 个 RTT 就可以「同时」完成建立连接与密钥协商)
:连接迁移(基于 TCP 传输协议的 HTTP 协议,由于是通过四元组(源 IP、源端口、目的 IP、目的端口)确定一条 TCP 连接,当移动设备的网络从 4G 切换到 WIFI 时,意味着 IP 地址变化了,那么就必须要断开连接,然后重新建立连接,QUIC 协议通过连接 ID 来标记通信的两个端点,P 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本,没有丝毫卡顿感,达到了连接迁移的功能)

问答环节

问:“https 和 http 相比,就是传输的内容多了对称加密,可以这么理解吗?”

答:建立连接时候:https 比 http多了 TLS 的握手过程;
传输内容的时候:https 会把数据进行加密,通常是对称加密数据;

问:“ 我看文中 TLS 和 SSL 没有做区分,这两个需要区分吗?”

答:这两实际上是一个东西。
SSL 是洋文 “Secure Sockets Layer” 的缩写,中文叫做「安全套接层」。它是在上世纪 90 年代中期,由网景公司设计的。
到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是 “Transport Layer Security” 的缩写),中文叫做 「传输层安全协议」。
很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

问:“为啥 SSL 的握手是 4 次?”

答:SSL/TLS 1.2 需要 4 握手,需要 2 个 RTT 的时延,就是 4 次握手:另外, SSL/TLS 1.3 优化了过程,只需要 1 个 RTT 往返时延,也就是只需要 3 次握手:


 

相关文章:

HTTP常见面试题(小林coding版总结)

1:HTTP基本概念 超文本 传输 协议 2:常见状态码 1xx 提示信息 2xx 成功 3xx 重定向 4xx 客户端错误 5xx 服务器错误 3:HTTP常见的字段 host 指定服务器的域名 Content-Length 回应的数据长度 Connection 长连接(Keep-Alive&#x…...

一整个分析模型库,大数据分析工具都这么玩了吗?

一整个分析模型库,100张BI报表,覆盖销售、财务、采购、库存等多个分析主题。只需对接ERP,就能自动生成BI报表,完成对海量数据的系统化分析。现在大数据分析工具都发展到这种程度了吗? 放眼看去,现阶段能做…...

最新企业服务总线ESB的国内主要厂商和开源厂商排名,方案书价格多少

企业服务总线ESB是什么? ESB平台(企业服务总线,Enterprise Service Bus)是一种企业级集成平台,它提供了一种开放的、基于标准的消息机制,通过简单的标准适配器和接口,来完成粗粒度应用&#xff…...

react重要知识点(面经)

react重要知识点(面经) react生命周期classhooks reduxredux 核心概念redux 计数器案例 react页面加载卡顿使用懒加载异步加载JavaScript压缩和缓存静态资源使用React.memo() PubSub使用方式1.1 react导入库1.2 react 页面引入pubsubjs1.3 pubsubjs使用2…...

面试题-6

1.精灵图和base64的区别是什么? 精灵图:把多张小图整合到一张大图上,利用定位的一些属性把小图显示在页面上,当访问页面可以减少请求,提高加载速度 base64:传输8bit字节代码的编码方式,把原本二进制形式转为64个字符的单位,最后组成字符串 …...

九宫格 图片 自定义 路径

<image :src" ../../static/img/ item.urlname .png " class"u-w-82 u-h-82 u-p-t-36"></image>使用场景&#xff1a;九宫格里含有多张图片 html <view class"u-p-b-46 u-p-x-35"><u-grid :border"false" c…...

Leetcode经典题目之“双指针交换元素“类题目

1 LC 27. 移除元素 class Solution {public int removeElement(int[] nums, int val) {int nnums.length;int s0;for(int i0;i<n;i){// 只有不等于目标值的时候才会进行交换&#xff0c;然后移动s指针if(nums[i]!val){swap(nums,i,s);}}return s;}void swap(int[]nums, int…...

计算机基础知识54

ORM的介绍 # ORM是什么&#xff1f; 我们在使用Django框架开发web应用的过程中&#xff0c;不可避免地会涉及到数据的管理操作&#xff08;增、删、改、查&#xff09;&#xff0c;而一旦谈到数据的管理操作&#xff0c;就需要用到数据库管理软件&#xff0c;例如mysql、oracle…...

深度系统(Deepin)开机无法登录,提示等待一千五百分钟

深度系统&#xff08;Deepin&#xff09;20.0&#xff0c; 某次开机无法登录&#xff0c;提示等待一千五百分钟。 &#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 用电脑这么多年&#xff0c;头一回遇到这种…...

工具及方法 - 多邻国: Duolingo

网站&#xff1a;Duolingo 有iOS和Android应用&#xff0c;在App Store和Google Play上都能下载。也可以使用网页版。我就在iOS上安装了付费版&#xff0c;为了小朋友学习英语&#xff0c;一年的费用&#xffe5;588。 目前学习中的课程是英语、日语和粤语。英语是小学课程&a…...

Redis篇---第十一篇

系列文章目录 文章目录 系列文章目录前言一、说说Redis持久化机制二、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题三、热点数据和冷数据是什么前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…...

linux CentOS7 安装git 配置秘钥公钥克隆代码

第一步&#xff1a;安装git yum -y install git #查看版本 git --version 第二步&#xff1a;配置git信息 git config --global user.name "username" git config --global user.email "XXXXX.com" 第三步&#xff1a;生成密钥和公钥&#xff0c; 后…...

深度学习之生成唐诗案例(Pytorch版)

主要思路&#xff1a; 对于唐诗生成来说&#xff0c;我们定义一个"S" 和 "E"作为开始和结束。 示例的唐诗大概有40000多首&#xff0c; 首先数据预处理&#xff0c;将唐诗加载到内存&#xff0c;生成对应的word2idx、idx2word、以及唐诗按顺序的字序列。…...

算法设计与分析算法实现——删数问题

通过棋盘输入一个高精度的正整数n(n的有效位数<=240)去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。变成对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。 输入:n,s 输出:最后剩下的最小数 输入实例: 178543 4 输出示例: 13 首先…...

基于Vue+SpringBoot的超市账单管理系统 开源项目

项目编号&#xff1a; S 032 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S032&#xff0c;文末获取源码。} 项目编号&#xff1a;S032&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…...

【Linux 内核分析课程作业 1】mmap 实现一个 key-valueMap

作业一 功能要求利用 mmap(虚拟内存映射文件) 机制实现一个带持久化能力的 key-valueMap 系统&#xff0c;至少支持单机单进程访问。(可能用到的 linux API: mmap、msync、mremap、munmap、ftruncate、fallocate 等) 电子版提交方式&#xff1a; 2023 年 11 月 20 日 18:00 前通…...

docker compose使用教程(docker-compose教程)

文章目录 Docker Compose 使用教程安装Docker ComposeLinuxWindows 和 macOS Docker Compose 基础Compose 文件结构配置服务网络与卷 Docker Compose 命令启动服务停止服务查看服务状态查看日志缩放服务 多环境部署健康检查与依赖管理Docker Compose 最佳实践常见问题解析如何覆…...

印刷企业实施MES管理系统需要哪些硬件设施

随着科技的飞速发展&#xff0c;印刷行业正面临着前所未有的挑战和机遇。为了提高生产效率&#xff0c;降低成本&#xff0c;并增强市场竞争力&#xff0c;越来越多的印刷企业开始实施制造执行系统&#xff08;MES&#xff09;管理系统。本文将重点讨论印刷企业在实施MES管理系…...

Java JSON字符串替换其中对应的值

代码&#xff1a; public static void main(String[] args) { // String theData crmScene.getData();String theData "[{\"type\":1,\"values\":[\"审批中\",\"未交付\"],\"name\":\"status\"}]"…...

Android VSYNC发展历程

0 前言 安卓直到android-4.1.1_r1才首次引入VSYNC实现&#xff0c;然后逐步演进到android-4.4才得以完善&#xff0c;并在android-11、12后继续大改。 1 尚未引入 android-4.0.4_r2.1之前尚未引入VSYNC[1]&#xff0c;SurfaceFlinger被实现为一个线程&#xff0c;通过睡眠来实…...

在Taotoken控制台清晰查看各模型用量与消费明细的实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Taotoken控制台清晰查看各模型用量与消费明细的实践 对于使用多个大模型API的项目而言&#xff0c;清晰、及时地了解资源消耗情况…...

GPT-5.5-Cyber深度解析:AI网络安全专用化时代的开启与行业重构

引言&#xff1a;一场改变游戏规则的发布 2026年5月7日&#xff0c;OpenAI在其官方博客发布了一篇题为《Scaling Trusted Access for Cyber with GPT-5.5 and GPT-5.5-Cyber》的文章&#xff0c;正式宣布推出其首款网络安全专用大模型GPT-5.5-Cyber。这一发布距离通用版GPT-5.…...

Go语言技能树工具goskill:构建与管理技术团队知识图谱

1. 项目概述&#xff1a;一个Go语言技能树的构建与管理工具最近在整理团队内部的技术栈和成员技能时&#xff0c;发现了一个挺普遍的问题&#xff1a;我们很难清晰地知道谁擅长什么&#xff0c;某个技术方向&#xff08;比如微服务、数据库优化&#xff09;的深度如何&#xff…...

3步实现企业级智能地址解析:Java开发者的终极效率提升指南

3步实现企业级智能地址解析&#xff1a;Java开发者的终极效率提升指南 【免费下载链接】address-parse Java 版智能解析收货地址 项目地址: https://gitcode.com/gh_mirrors/addr/address-parse 在电商、物流、外卖等数字化业务高速发展的今天&#xff0c;地址解析已成为…...

Obsidian BMO Chatbot:基于RAG与LLM的个人知识库智能问答实践

1. 项目概述&#xff1a;当知识库遇上AI助手如果你和我一样&#xff0c;是Obsidian的重度用户&#xff0c;那么你一定体会过那种“知识在手边&#xff0c;却不知如何用”的尴尬。笔记越记越多&#xff0c;形成了一个庞大的个人知识库&#xff0c;但当你需要快速查找某个概念、串…...

AI SaaS快速开发:从架构设计到生产部署的实战指南

1. 项目概述&#xff1a;一个面向AI SaaS的快速开发起点最近在GitHub上看到一个挺有意思的项目&#xff0c;叫sony9997/ai-saas。光看这个名字&#xff0c;就能大概猜到它的定位&#xff1a;一个为构建AI驱动的SaaS&#xff08;软件即服务&#xff09;应用而设计的项目模板或脚…...

如何高效使用视频加速控制器:提升学习与工作效率的终极指南

如何高效使用视频加速控制器&#xff1a;提升学习与工作效率的终极指南 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 视频加速控制器&#xff08;Video Speed Controller&am…...

Sloppy开发哲学:在可控范围内拥抱不完美,加速软件交付

1. 项目概述&#xff1a;一个“不完美”但高效的开发哲学在软件开发的日常里&#xff0c;我们常常被“完美主义”所困。每一次代码提交都力求优雅&#xff0c;每一个功能设计都追求极致&#xff0c;每一次重构都希望一劳永逸。但现实往往是&#xff0c;在快速迭代的业务需求面前…...

LeaguePrank:英雄联盟段位修改工具完全指南 - 安全伪装你的游戏身份

LeaguePrank&#xff1a;英雄联盟段位修改工具完全指南 - 安全伪装你的游戏身份 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于英雄联盟官方LCU API开发的段位修改工具&#xff0c;能够安全合法地自定义…...

轻量级AI Agent框架MiniAgent:从核心原理到实战应用

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ZhuLinsen/MiniAgent”。光看名字&#xff0c;你可能会觉得这又是一个“Agent”框架&#xff0c;毕竟现在AI Agent满天飞&#xff0c;从AutoGPT到LangChain&#xff0c;各种大而全的解决方案层出不穷…...