Day12 - 计算机网络 - HTTP

news2025/6/1 10:14:01

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.coloradmin.cn/o/2392475.html

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

相关文章

Linux驱动学习笔记(十)

热插拔 1.热插拔&#xff1a;就是带电插拔&#xff0c;即允许用户在不关闭系统&#xff0c;不切断电源的情况下拆卸或安装硬盘&#xff0c;板卡等设备。热插拔是内核和用户空间之间&#xff0c;通过调用用户空间程序实现交互来实现的&#xff0c;当内核发生了某种热拔插事件时…

TI dsp FSI (快速串行接口)

简介 快速串行接口&#xff08;FSI - Fast Serial Interface &#xff09;模块是一种串行通信外设&#xff0c;能够在隔离设备之间实现可靠的高速通信。在两个没有共同电源和接地连接的电子电路必须交换信息的情况下&#xff0c;电气隔离设备被使用。 虽然隔离设备促进了信号通…

责任链模式:构建灵活可扩展的请求处理体系(Java 实现详解)

一、责任链模式核心概念解析 &#xff08;一&#xff09;模式定义与本质 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是将多个处理者对象连成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有某…

wechat-003-学习笔记

1.路由跳转页面&#xff1a;携带的参数会出现在onlaod中的options中。 注意&#xff1a;原生小程序对路由传参的长度也有限制&#xff0c;过长会被截掉。 2.wx.setNavigationBarTitle(Object object) 动态设置当前页面的标题 3.在根目录中的app.json文件中配置 后台播放音乐的能…

【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知

文章概要&#xff1a; 本文是一篇详细的技术教程&#xff0c;介绍如何使用魔搭社区&#xff08;ModelScope&#xff09;的GPU资源来进行LLaMA-Factory的模型微调。文章分为11个主要步骤&#xff0c;从环境准备到最终的模型测试&#xff0c;系统地介绍了整个微调流程。主要内容包…

【数据结构】哈希表的实现

文章目录 1. 哈希的介绍1.1 直接定址法1.2 哈希冲突1.3 负载因子1.4 哈希函数1.4.1 除法散列法/除留余数法1.4.2 乘法散列法1.4.3 全域散列法 1.5 处理哈希冲突1.5.1 开放地址法1.5.1.1 线性探测1.5.1.2 二次探测1.5.1.3 双重探测1.5.1.4 三种探测方法对比 1.6.3 链地址法 2. 哈…

永磁同步电机控制算法--基于电磁转矩反馈补偿的新型IP调节器

一、基本原理 先给出IP速度控制器还是PI速度控制器的传递函数&#xff1a; PI调节器 IP调节器 从IP速度控制器还是PI速度控制器的传递函数可以看出&#xff0c;系统的抗负载转矩扰动能力相同,因此虽然采用IP速度控制器改善了转速环的超调问题&#xff0c;但仍然需要通过其他途…

RabbitMQ 应用 - SpringBoot

以下介绍的是基于 SpringBoot 的 RabbitMQ 开发介绍 Spring Spring AMQP RabbitMQ RabbitMQ tutorial - "Hello World!" | RabbitMQ 工程搭建步骤: 1.引入依赖 2.编写 yml 配置,配置基本信息 3.编写生产者代码 4.编写消费者代码 定义监听类,使用 RabbitListener…

基于递归思想的系统架构图自动化生成实践

文章目录 一、核心思想解析二、关键技术实现1. 动态布局算法2. 样式规范集成3. MCP服务封装三、典型应用场景四、最佳实践建议五、扩展方向一、核心思想解析 本系统通过递归算法实现了Markdown层级结构到PPTX架构图的自动转换,其核心设计思想包含两个维度: 数据结构递归:将…

OpenGL Chan视频学习-9 Index Buffers inOpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再单独整理网站具体函数了&#xff0c;网站直接翻译会…

Nginx安全防护与HTTPS部署实战

目录 前言一. 核心安全配置1. 隐藏版本号2. 限制危险请求方法3. 请求限制&#xff08;CC攻击防御&#xff09;&#xff08;1&#xff09;使用nginx的limit_req模块限制请求速率&#xff08;2&#xff09;压力测试验证 4. 防盗链 二. 高级防护1. 动态黑名单&#xff08;1&#x…

JAVA重症监护系统源码 ICU重症监护系统源码 智慧医院重症监护系统源码

智慧医院重症监护系统源码 ICU重症监护系统源码 开发语言&#xff1a;JavaVUE ICU护理记录&#xff1a;实现病人数据的自动采集&#xff0c;实时记录监护过程数据。支持主流厂家的监护仪、呼吸机等床旁数字化设备的数据采集。对接检验检查系统&#xff0c;实现自动化录入。喜…

python:机器学习(KNN算法)

本文目录&#xff1a; 一、K-近邻算法思想二、KNN的应用方式&#xff08; 一&#xff09;分类流程&#xff08;二&#xff09;回归流程 三、API介绍&#xff08;一&#xff09;分类预测操作&#xff08;二&#xff09;回归预测操作 四、距离度量方法&#xff08;一&#xff09;…

【笔记】2025 年 Windows 系统下 abu 量化交易库部署与适配指南

#工作记录 前言 在量化交易的学习探索中&#xff0c;偶然接触到 2017 年开源的 abu 量化交易库&#xff0c;其代码结构和思路对新手理解量化回测、指标分析等基础逻辑有一定参考价值。然而&#xff0c;当尝试在 2025 年的开发环境中部署这个久未更新的项目时&#xff0c;遇到…

小程序 - 视图与逻辑

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言: “心有多大,舞台就有多大。” 📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒T…

ChatGPT Plus/Pro 订阅教程(支持支付宝)

订阅 ChatGPT Plus GPT-4 最简单&#xff0c;成功率最高的方案 1. 登录 chat.openai.com 依次点击 Login &#xff0c;输入邮箱和密码 2. 点击升级 Upgrade 登录自己的 OpenAI 帐户后&#xff0c;点击左下角的 Upgrade to Plus&#xff0c;在弹窗中选择 Upgrade plan。 如果…

[蓝帽杯 2022 初赛]网站取证_2

一、找到与数据库有关系的PHP文件 打开内容如下&#xff0c;发现数据库密码是函数my_encrypt()返回的结果。 二、在文件夹encrypt中找到encrypt.php,内容如下&#xff0c;其中mcrypt已不再使用&#xff0c;所以使用php>7版本可能没有执行结果&#xff0c;需要换成较低版本…

安装 Node.js 和配置 cnpm 镜像源

一、安装 Node.js 方式一&#xff1a;官网下载&#xff08;适合所有系统&#xff09; 访问 Node.js 官网 推荐选择 LTS&#xff08;长期支持&#xff09;版本&#xff0c;点击下载安装包。 根据系统提示一步步完成安装。 方式二&#xff1a;通过包管理器安装&#xff08;建…

MacOS内存管理-删除冗余系统数据System Data

文章目录 一、问题复现二、解决思路三、解决流程四、附录 一、问题复现 以题主的的 Mac 为例&#xff0c;我们可以看到System Data所占数据高达77.08GB&#xff0c;远远超出系统所占内存 二、解决思路 占据大量空间的是分散在系统中各个位置Cache数据&#xff1b; 其中容量最…

行为型:中介者模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的&#xff1a;通过引入一个中介对象来封装一组对象之间的交互&#xff0c;解决对象间过度耦合、频繁交互的问题。不管是对象引用维护还是消息的转发&am…