Day12 - 计算机网络 - HTTP

HTTP常用状态码及含义?

301和302区别?

  • 301:永久性移动,请求的资源已被永久移动到新位置。服务器返回此响应时,会返回新的资源地址。
  • 302:临时性性移动,服务器从另外的地址响应资源,但是客户端还应该使用这个地址。

HTTP有哪些请求方式?

PUT是新建或替换指定资源 

GET可以实现写操作吗 

可以但不建议,可能会导致严重的安全问题,如跨站请求伪造(CSRF)。

开发过程中杜绝使用GET,并在接口上明确规定使用哪种请求方式,请求方式错误会返回405

什么是幂等,幂等方式有哪些 

无论操作执行多少次,,对服务器状态产生的影响是相同的

在正确实现的条件下,GET、HEAD、PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。

GET和POST的区别

传参方式/是否缓存:GET的参数明文放在URL中(告诉服务器自己要找哪些资源),来做一些简单的请求资源操作,可能被浏览器缓存,不安全;POST将请求数据放在请求体中而不是URL中,让服务器来处理这些数据,如果用HTTPS的话请求体是加密的,更加安全,并且一般不会被缓存。

幂等性:GET请求是幂等的,不会改变服务器的状态;POST不是幂等的,会对服务器的数据有影响

GET的长度限制?

GET是通过URL 传递数据,但是URL本身不限长度,所以对GET做出长度限制的其实是浏览器。

例如 IE 浏览器对 URL 的最大限制是 2000 多个字符,大概 2kb 左右,像 Chrome、Firefox 等浏览器支持的 URL 字符数更多,其中 FireFox 中 URL 的最大长度限制是 65536 个字符,Chrome 则是 8182 个字符。

这个长度限制也不是针对数据部分,而是针对整个 URL。

HTTP请求的过程和原理

HTTP是基于TCP/IP的应用层协议,使用TCP作为传输层协议,通过建立TCP连接来传输数据。HTTP遵循标准的客户端-服务端模型。

 DNS解析、TCP连接、HTTP请求、服务器处理响应、断开TCP连接。

客户端发送一个请求到服务器,服务器处理请求并返回一个响应。这个过程是同步的,也就是说,客户端在发送请求后必须等待服务器的响应。在等待响应的过程中,客户端不会发送其他请求。

怎么利用多线程下载一个数据? 

  • 采用分块下载,通过设置 HTTP 请求头的 Range 字段指定下载的字节区间。例如,Range: bytes=0-1023 表示下载文件的前 1024 字节。
  • 首先通过HEAD请求获取文件的总大小,然后根据文件大小和线程数对文件进行切割「connection.setRequestProperty("Range", "bytes=" + start + "-" + end);」,每个线程都获取一个输入流,负责一个特定范围的文件下载(本地待写入的RandomAccessFile文件从start开始:file.seek(start))。
  • 最后启动多线程下载。

说一下HTTP的报文结构?

HTTP报文分为请求报文和相应报文,都包含了起始行、头部和消息正文

HTTP请求报文的结构

由请求行,请求头和消息正文(请求体)组成

GET /index.html HTTP/1.1 //请求行包括请求方法请求 URLHTTP 协议的版本
Host: www.javabetter.cn //请求头包括主机名可接受媒体类型浏览器类型请求内容的范围
Accept: text/html
User-Agent: AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

请求头部和消息正文之间有一个空行,表示请求头部结束。

消息正文是可选的,POST 请求中的表单数据;GET 请求中没有消息正文

HTTP响应报文的结构

由状态行、响应头和消息征文(响应体)组成

HTTP/1.0 200 OK //状态行包括HTTP的版本、状态码、状态信息
Content-Type: text/plain //响应头包括响应数据类型响应数据长度资源过期时间资源最后修改时间服务器类型和版本
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

空行

// 响应体也是可选的,通常是HTML页面,也可能是 204 No Content 状态码的响应。
<html>
  <body>Java八股</body>
</html>

URI和URL区别

  • URI:统一资源标识符(Uniform Resource Identifier),标识的是Web上每一种可用资源,比如HTML文档、图像、视频片段、程序等都是由URI标识等
  • URL:统一资源定位符(Uniform Resource Location)是URI的子集,主要作用是提供资源的路径

主要区别在于URL除了提供了资源的标识,还提供了资源的访问方式,所有能够唯一标识一个资源的字符串就是URI,但是只有指明了如何定位访问这个资源的URI才是URL

HTTP 1.0和HTTP2.0的区别? 

HTTP 1.0默认是短连接,HTTP 1.1默认是长连接,HTTP 2.0默认是多路复用

说下HTTP 1.0

  • 非持久连接:每个HTTP响应对之后TCP都会关闭连接,每次相同的请求也要重新建立TCP连接,可以设置Connection: keep alive开启长连接
  • 无状态协议:HTTP 1.0是无状态的,每次请求是独立的,服务器不保存任何请求的状态信息

说下HTTP 1.1

  • 持久连接:HTTP 1.1默认情况下是持久连接,请求完成后不会立即关闭连接,可以在一个连接上发送多次请求和响应,减轻了TCP连接的开销。
  • 流水线处理:HTTP 1.1支持客户端在请求还未返回响应时发送下一个请求,但服务器必须按照接收到请求的顺序依次返回响应。

说下HTTP 2.0

目前使用最广泛的HTTP版本

  • 二进制协议:HTTP 2.0采用二进制而不是文本格式来传输数据,解析更高效
  • 多路复用:一个TCP连接上可以同时进行多个HTTP请求/响应,解决了头阻塞的问题
  • 头部压缩:HTTP协议不带状态,所以每次请求都要附上全部信息。HTTP 2.0引入了头部压缩机制,可以使用gzip或compress压缩之后再发送,减少了冗余的头部信息。
  • 服务器推送:服务器可以向客户端主动推送信息,而不需要客户端请求。

HTTP/3了解吗?

HTTP2虽然逻辑上各个流之间相互独立,但是在传输的过程中,如果某个流的数据有丢包,其后的流仍然会阻塞,HTTP/3采用的是QUIC快速UDP连接,相比于采用TCP连接的HTTP2,HTTP3能够实现各个流之间的完全独立,互不干扰。同时QUIC协议能够实现在传输过程中就完成了TLS加密握手,更直接了。

HTTP长连接什么时候会超时?

可以在HTTP方面或TCP方面设置

HTTP有一个守护进程httpd,其中可以设置keep-alive timeout,也可以在header中设置超时时间

TCP的keep-alive包含三个参数,在系统内核的net.ipv4里设置,如果TCP闲置时间超过了tcp_keepalive_time,就会发送侦测包,并每隔tcp_keepalive_intvl发送一次,一共发送tcp_keepalive_probes后如果还没有收到客户端的ACK,就会关闭连接

tcp_keepalive_intvl = 15
tcp_keepalive_probes = 5
tcp_keepalive_time = 1800

HTTP与HTTPS的区别 

HTTPS是加密的,在HTTP基础上加入了SSL/TSL协议。

HTTP 的默认端⼝号是 80,URL 以http://开头;HTTPS 的默认端⼝号是 443,URL 以https://开头。

为什么要使用HTTPS?

因为HTTP是明文传输的,存在数据窃听数据篡改数据伪造等,HTTP引入了SSL/TSL解决了这些问题。

SSL/TSL加密过程中涉及到两种加密方法:

对称加密:双方用会话密钥加密通信内容。

非对称加密:

  • 服务器身份验证: 客户端通过服务器发送的数字证书(由CA签发,内含服务器公钥)来验证服务器身份。客户端使用预装的CA公钥验证证书签名
  • 客户端生成预主密钥: 客户端生成一个随机的预主密钥
  • 客户端加密预主密钥: 客户端使用从服务器证书中获得的服务器公钥来加密这个预主密钥
  • 客户端发送加密数据: 客户端将加密后的预主密钥发送给服务器。
  • 服务器解密预主密钥: 服务器使用自己的私钥解密收到的数据,得到预主密钥。
  • 双方派生会话密钥: 客户端和服务器现在都拥有了相同的预主密钥、以及之前交换的Client Random和Server Random。它们各自使用这些信息通过密钥派生函数计算出相同的对称会话密钥(通常包括用于加密的密钥和用于消息认证码MAC的密钥)。
  • 安全通信: 之后,双方使用这个派生出的对称会话密钥进行加密和解密实际的HTTP应用数据。

HTTPS是怎么建立连接的?

握手阶段和数据传输阶段。

HTTPS会加密URL吗?

HTTPS会加密整个报文,URL是报文的一部分,所以也会被加密,但因为涉及SSL握手的过程,所以域名信息会被暴露出来,完整的URL也有可能会在日志中被记录,这些日志可能是明文的。

所以即使使用HTTPS,敏感信息也不要写入URL

什么是中间人攻击?

MITM,攻击者可以在通信双方的中间插入自己。

SSL 协议就是通过验证服务器的数字证书是否是由 CA(权威的受信任的数字证书认证机构)签发来防止中间人攻击的。

HTTPS怎么保证建立的信道是安全的?

主要通过 SSL/TLS 协议的多层次安全机制,首先在握手阶段,客户端和服务器使用得是非对称加密,生成的会话密钥只有服务器的私钥才能解密,而私钥只有服务器持有。

在数据传输阶段,即使攻击者拦截了通信数据,没有会话密钥也无法解密

HTTP可以被抓包吗?

可以,但是信息是加密的,如果中间人通过伪造CA证书骗取客户端信任,那么就有可能得到会话密钥,再伪装客户端和服务器通信,服务器的响应转发给客户端,完成中间人攻击。

常用的抓包工具有 WiresharkFiddlerCharles 等。

CA证书的签发过程?

CA将申请方的公钥域名证书过期时间,证书颁发方签名算法标识符等信息打成一个包(证书),然后进行Hash值计算,然后通过CA的私钥加密这个Hash值,生成签名,最后把签名放入证书中。

客户端如何校验证书的合法性?

首先检查证书的颁发者(通过比对内置的CA列表)、所有者、颁发日期、是否被吊销,持有方的域名。

检查通过后,用内置的CA中的公钥解密签名的内容,得到一个Hash2。

用同样的Hash算法获取证书的Hash值Hash1,比较Hash1和Hash2,如果值相同则为可信赖的证书。

如何理解HTTP协议是无状态的?

  • 每个 HTTP 请求都包含了所有所必须的信息,服务器在处理当前请求时,不依赖于之前的任何请求信息。
  • 服务器不会记录任何客户端请求的状态,每次请求都像是第一次与服务器通信。

由于 HTTP 是无状态的,像用户的购物车状态就必须通过其他方式来保持,如在每次请求中传递用户的 ID,或者使用 Cookie 在客户端保存购物车状态。

有什么办法记录状态?

Cookies:服务器通过Set-Cookies响应头将状态信息返回给客户端,客户端之后的请求就使用这些Cookies来维持状态。

Session:服务器生成一个唯一的会话ID存储在Cookie中,并在服务器端维护该Session的状态信息。每次请求都发送Cookie中的Session ID以便服务器获取该会话之前的状态。

Token:使用 JWT(JSON Web Token)等机制在客户端存储状态信息,客户端在每次请求中发送该 Token。 

Session和Cookie的区别和联系

区别:

  • 存储位置:Session存储在服务器,Cookie存储在客户端
  • 存储数据类型:Session可以存储任意类型,Cookies只能存储ASCII
  • 有效期:Session一般有效期较短,客户端关闭或者Session超时都会失效;Cookies可设置为长时间保持,比如默认登陆。
  • 安全性:Session存储在服务端较安全;Cookie存储在客户端容易被窃取
  • 存储大小:Session可存储的数据容量较大,Cookies保存的数据不能超过4K

联系:

  • 用户第一次请求服务器时,服务器会创建对应的Session及对应的ID用于唯一标识会话,将Session ID返回给客户端,客户端会把ID保存在Cookie中,同时用Cookies记录该ID属于哪个域名
  • 当用户第二次访问服务器时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在,则自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到,说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。 

分布式环境下如何处理Session?
客户端的不同请求经过负载均衡可能被分配到不同的服务器上,可以使用Redis分布式缓存来存储Session,在多台服务器共享。

客户端无法使用Cookie怎么村Session ID?
可以使用客户端的本地存储,比如浏览器的sessionStorage
然后把Session ID放在URL的请求参数里或者请求头里。

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

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

相关文章

【python深度学习】Day 40 训练和测试的规范写法

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练代码…

亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应

亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应 如果说我们之前讨论的安全措施(如 IAM、网络策略、密钥管理、漏洞补丁)是为我们的“数字城堡”修筑坚固的城墙、设置精密的门锁、定期检查和修补潜在的裂缝,那么安全日志就像是遍布城堡内外的监控摄像头和出入登记簿,…

CppCon 2014 学习第2天:Using Web Services in C++

概述 这是一个会议或演讲的概述内容&#xff0c;主要介绍一个关于C Rest SDK的分享&#xff0c;翻译和理解如下&#xff1a; 翻译 概述 先介绍什么是典型的Web服务结构和它的特征讲讲调用这些Web服务的几种方式重点介绍自己团队开发的一个C库&#xff08;C Rest SDK&#xf…

【OpenHarmony】【交叉编译】使用gn在Linux编译3568a上运行的可执行程序

linux下编译arm64可执行程序 一.gn ninja安装二.交叉编译工具链安装1.arm交叉编译工具2.安装arm64编译器 三. gn文件添加arm及arm64工具链四.编译验证 本文以gn nijia安装中demo为例&#xff0c;将其编译为在arm64(rk_3568_a开发板)环境下可运行的程序 一.gn ninja安装 安装g…

【开发心得】AstrBot对接飞书失败的问题探究

飞书与AstrBot的集成使用中,偶尔出现连接不稳定的现象。尽管不影响核心功能,但为深入探究技术细节并推动后续优化,需系统性记录该问题。先从底层通信机制入手,分析连接建立的逻辑与数据交互流程。基于实际现象,明确问题发生的具体场景和表现特征,进而梳理潜在影响因素,为…

Spring Boot 3.5.0中文文档上线

Spring Boot 3.5.0 中文文档翻译完成&#xff0c;需要的可收藏 传送门&#xff1a;Spring Boot 3.5.0 中文文档

7.atlas安装

1.服务器规划 软件版本参考&#xff1a; https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-release-2.2?hlzh-cn 由于hive3.1.3不完全支持jdk8,所以将hive的版本调整成4.0.1。这个版本没有验证过&#xff0c;需要读者自己抉择。 所有的软件都安装再/op…

c# 获取电脑 分辨率 及 DPI 设置

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices;/// <summary> /// 这个可以 /// </summary> class Program {static void Main(){//设置DPI感知try{SetProcessDpiAwareness(…

LangChain表达式(LCEL)实操案例1

案例1&#xff1a;写一篇短文&#xff0c;然后对这篇短文进行打分 from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.runnables import RunnableWithMessageHist…

OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比

OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比 您提到的两种赋值操作属于不同场景&#xff0c;它们的性能和稳定性取决于具体使用方式。下面从几个维度进行分析&#xff1a; 1. 操作本质对比 &#xff08;1&#xff09;OleDbParameter.Value 用途&#xf…

【Opencv+Yolo】Day2_图像处理

目录 一、图像梯度计算 图像梯度-sobal算子&#xff1a; Scharr&#xff1a;权重变化更大&#xff08;线条更加丰富&#xff0c;比Sobel更加细致捕捉更多梯度信息&#xff09; Laplacian算子&#xff1a;对噪音点敏感&#xff08;可以和其他一起结合使用&#xff09; 二、边…

STM32通过rt_hw_hard_fault_exception中的LR寄存器追溯程序问题​

1. 问题现象 程序运行导致rt_hw_hard_fault_exception 如图 显示错误相关代码 struct exception_stack_frame {uint32_t r0;uint32_t r1;uint32_t r2;uint32_t r3;uint32_t r12; uint32_t lr; // 链接寄存器 (LR)uint32_t pc; // 程序计数器 (PC)uint32_t psr; // 程序状态…

Mac安装配置InfluxDB,InfluxDB快速入门,Java集成InfluxDB

1. 与MySQL的比较 InfluxDBMySQL解释BucketDatabase数据库MeasurementTable表TagIndexed Column索引列FieldColumn普通列PointRow每行数据 2. 安装FluxDB brew update默认安装 2.x的版本 brew install influxdb查看influxdb版本 influxd version # InfluxDB 2.7.11 (git: …

【spring】spring中的retry重试机制; resilience4j熔断限流教程;springboot整合retry+resilience4j教程

在调用三方接口时&#xff0c;我们一般要考虑接口调用失败的处理&#xff0c;可以通过spring提供的retry来实现&#xff1b;如果重试几次都失败了&#xff0c;可能就要考虑降级补偿了&#xff1b; 有时我们也可能要考虑熔断&#xff0c;在微服务中可能会使用sentinel来做熔断&a…

(21)量子计算对密码学的影响

文章目录 2️⃣1️⃣ 量子计算对密码学的影响 &#x1f30c;&#x1f50d; TL;DR&#x1f680; 量子计算&#xff1a;密码学的终结者&#xff1f;⚡ 量子计算的破坏力 &#x1f510; Java密码学体系面临的量子威胁&#x1f525; 受影响最严重的Java安全组件 &#x1f6e1;️ 后…

经营分析会,财务该怎么做?

目录 一、业绩洞察&#xff1a;从「现象描述」到「因果分析」 1.分层拆解 2.关联验证 3.根因追溯 二、预算管理&#xff1a;从「刚性控制」到「动态平衡」 1.分类管控 2.滚动校准 3.价值评估 三、客户与市场&#xff1a;从「交易记录」到「价值评估」 1.价值分层 2.…

进阶智能体实战九、图文需求分析助手(ChatGpt多模态版)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)

🧠 基于 ChatGPT 多模态大模型的需求文档分析助手 本文将介绍如何利用 OpenAI 的 GPT-4o 多模态能力,构建一个智能的需求文档分析助手,自动提取功能模块、菜单设计、字段设计、状态机、流程图和 ER 模型等关键内容。 一、🔧 环境准备 在开始之前,请确保您已经完成了基础…

图书管理系统的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 图书管理系统的设计与实现 学生姓名 学生学号 所在学院 专业班级 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕业设计(论文)作品是本人在指导教师的指导下,独…

直线模组在手术机器人中有哪些技术挑战?

手术机器人在现代医疗领域发挥着越来越重要的作用&#xff0c;直线模组作为其关键部件&#xff0c;对手术机器人的性能有着至关重要的影响。然而&#xff0c;在手术机器人中使用直线模组面临着诸多技术挑战&#xff0c;具体如下&#xff1a; 1、‌高精度要求‌&#xff1a;手术…

技术-工程-管用养修保-智能硬件-智能软件五维黄金序位模型

融智学工程技术体系&#xff1a;五维协同架构 基于邹晓辉教授的框架&#xff0c;工程技术体系重构为&#xff1a;技术-工程-管用养修保-智能硬件-智能软件五维黄金序位模型&#xff1a; math \mathbb{E}_{\text{技}} \underbrace{\prod_{\text{Dis}} \text{TechnoCore}}_{\…