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

第十四章-PHP与HTTP协议

第十四章-PHP与HTTP协议

一,HTTP 协议详解

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的协议之一,用于客户端(如浏览器)与服务器之间的通信。它是 Web 技术的基石,理解 HTTP 协议是开发 Web 应用的核心基础。以下是 HTTP 协议的全面解析:


一、HTTP 协议基础

1. 协议特性
  • 无状态 (Stateless)
    每个 HTTP 请求相互独立,服务器默认不保存客户端状态(如用户登录信息)。状态管理需通过 Cookie、Session 或 Token 实现。
  • 基于请求-响应模型
    • 客户端发送请求(Request) → 服务器返回响应(Response)。
    • 支持多种数据格式:HTML、JSON、XML、图片、视频等。
  • 灵活可扩展
    • 通过 HTTP 头部(Headers) 扩展功能(如缓存控制、内容协商)。
    • 支持 HTTPS(HTTP + SSL/TLS)加密传输。
2. 协议版本
版本年份核心改进
HTTP/0.91991仅支持 GET 方法,返回纯文本
HTTP/1.01996支持 MIME 类型、状态码、Header
HTTP/1.11999持久连接、管道化、Host 头
HTTP/22015二进制协议、多路复用、头部压缩
HTTP/32022基于 QUIC 协议(UDP)、减少延迟

二、HTTP 消息结构

1. 请求(Request)
GET /index.html HTTP/1.1             # 请求行:方法 + 路径 + 协议版本
Host: www.example.com                # 头部字段(Headers)
User-Agent: Mozilla/5.0
Accept: text/html# 空行(分隔头部和消息体)# 消息体(Body,GET 请求通常为空)
  • 请求方法 (Methods)

    方法用途幂等性
    GET获取资源(参数在 URL)
    POST提交数据(参数在 Body)
    PUT更新完整资源
    DELETE删除资源
    PATCH更新部分资源
    HEAD获取响应头(无 Body)
    OPTIONS查询服务器支持的通信选项
2. 响应(Response)
HTTP/1.1 200 OK                       # 状态行:协议版本 + 状态码 + 状态描述
Content-Type: text/html               # 头部字段(Headers)
Content-Length: 1234
Date: Mon, 01 Jan 2024 12:00:00 GMT# 空行
<!DOCTYPE html>                       # 消息体(Body)
<html>...</html>
  • 状态码 (Status Codes)

    状态码类别常见示例
    1xx信息响应100(继续)
    2xx成功200(OK)、201(Created)
    3xx重定向301(永久重定向)、304(未修改)
    4xx客户端错误400(错误请求)、403(禁止访问)
    5xx服务端错误500(内部错误)、503(服务不可用)

三、核心机制详解

1. 连接管理
  • 短连接 (HTTP/1.0)
    每次请求后关闭 TCP 连接,效率低。
  • 持久连接 (HTTP/1.1)
    • 默认保持 TCP 连接复用(Connection: keep-alive)。
    • 通过 Content-LengthTransfer-Encoding: chunked 处理动态内容。
  • 多路复用 (HTTP/2)
    单个 TCP 连接上并行传输多个请求/响应,解决队头阻塞问题。
2. 缓存机制
  • 强缓存
    • Cache-Control: max-age=3600:资源有效期 1 小时。
    • Expires: Mon, 01 Jan 2024 12:00:00 GMT(HTTP/1.0,已被取代)。
  • 协商缓存
    • Last-Modified + If-Modified-Since:基于时间戳。
    • ETag + If-None-Match:基于内容哈希值。
3. 内容协商

客户端通过 Header 声明偏好,服务器返回最合适的内容:

  • Accept: text/html, application/json(内容类型)
  • Accept-Language: en-US, zh-CN(语言)
  • Accept-Encoding: gzip, deflate(压缩方式)
4. 安全机制
  • HTTPS

    • HTTP over SSL/TLS,加密传输数据。
    • 通过数字证书验证服务器身份。
  • CORS (跨域资源共享)

    Access-Control-Allow-Origin: https://trusted-site.com
    Access-Control-Allow-Methods: GET, POST
    

四、HTTP 头部关键字段

常用请求头
字段用途
Host目标域名(HTTP/1.1 必需)
User-Agent客户端标识(浏览器、操作系统)
Cookie发送服务器设置的 Cookie
Authorization认证凭证(如 Bearer <token>
Content-Type请求体的 MIME 类型(如 application/json
常用响应头
字段用途
Set-Cookie设置客户端的 Cookie
Location重定向目标 URL(配合 3xx 状态码)
Content-Encoding内容压缩方式(如 gzip
Cache-Control缓存策略(如 no-cache
Content-Security-Policy防止 XSS 攻击

二,常见的HTTP 响应设置

一、基础响应设置

1. 设置 HTTP 状态码
// 直接设置状态码 (PHP >= 5.4)
http_response_code(404); // 返回 404 Not Found// 传统方式(兼容旧版本)
header("HTTP/1.1 403 Forbidden");
2. 设置响应内容类型
// 返回 HTML
header('Content-Type: text/html; charset=utf-8');// 返回 JSON(API 开发必备)
header('Content-Type: application/json; charset=utf-8');// 返回纯文本
header('Content-Type: text/plain');// 返回 XML
header('Content-Type: application/xml');

二、重定向与页面跳转

1. 基础重定向
// 302 临时重定向(默认)
header('Location: /new-page.php');
exit; // 必须立即终止脚本执行// 301 永久重定向
header('Location: /permanent-page.php', true, 301);
exit;
2. 延迟重定向
// 3 秒后跳转
header('Refresh: 3; url=/target-page.php');
echo '即将跳转,请稍候...';

三、缓存控制

1. 禁止浏览器缓存
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
header('Expires: 0'); // 代理服务器缓存
2. 设置资源缓存时间
// 缓存 1 小时(适用于静态资源)
header('Cache-Control: public, max-age=3600');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');

四、文件操作相关

1. 文件下载
$filePath = '/path/to/file.zip';header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . filesize($filePath));readfile($filePath);
exit;
2. 断点续传支持
header('Accept-Ranges: bytes');
header('Content-Length: ' . filesize($filePath));

五、安全相关头部

1. 防止点击劫持
header('X-Frame-Options: DENY'); // 或 SAMEORIGIN
2. 内容安全策略(CSP)
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com");
3. 禁用 MIME 类型嗅探
header('X-Content-Type-Options: nosniff');

六、跨域资源共享(CORS)

1. 简单跨域请求
header('Access-Control-Allow-Origin: *'); // 允许所有域名(慎用)
header('Access-Control-Allow-Origin: https://trusted-site.com'); // 指定域名
2. 预检请求处理
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');header('Access-Control-Allow-Headers: Content-Type, Authorization');header('Access-Control-Max-Age: 86400'); // 缓存预检结果 24 小时exit;
}

七、Cookie 操作

1. 设置 Cookie
setcookie('user_token',          // Cookie 名称'abc123xyz',           // 值time() + 3600,         // 过期时间(1 小时)'/',                   // 有效路径'.example.com',        // 域名(支持子域名)true,                  // 仅 HTTPS 传输true                   // 禁止 JavaScript 访问(HttpOnly)
);
2. 删除 Cookie
setcookie('user_token', '', time() - 3600, '/', '.example.com', true, true);

八、高级场景示例

1. 构建 JSON API
try {$data = ['status' => 'success', 'data' => fetchData()];http_response_code(200);
} catch (Exception $e) {$data = ['status' => 'error', 'message' => $e->getMessage()];http_response_code(500);
}header('Content-Type: application/json');
echo json_encode($data, JSON_UNESCAPED_UNICODE);
exit;
2. 强制下载大文件(内存优化)
$file = fopen('large-file.iso', 'rb');header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="large-file.iso"');while (!feof($file)) {echo fread($file, 8192); // 分块输出ob_flush();flush();
}fclose($file);
exit;

关键注意事项

  1. 输出顺序问题

    • 所有 header() 调用必须在任何实际输出(包括空格和空行)之前
    • 使用 ob_start() 开启输出缓冲可避免报错
  2. 编码一致性

    header('Content-Type: text/html; charset=utf-8');
    // 同时设置 PHP 内部编码
    mb_internal_encoding('UTF-8');
    
  3. 性能优化

    • 避免频繁设置重复头部
    • 使用 header_remove() 清除不需要的默认头部
  4. 安全防护

    • 敏感操作后立即调用 session_regenerate_id()
    • 使用 header('X-XSS-Protection: 1; mode=block') 启用浏览器 XSS 过滤

三, PHP模拟 HTTP 请求

一、使用 file_get_contents() 发送请求

适用于简单 GET/POST 请求,需开启 allow_url_fopen 配置。

1. 发送 GET 请求
$url = 'https://api.example.com/data?param1=value1&param2=value2';
$response = file_get_contents($url);
echo $response;
2. 发送 POST 请求(表单数据)
$url = 'https://api.example.com/submit';
$data = ['key1' => 'value1', 'key2' => 'value2'];$options = ['http' => ['method' => 'POST','header' => 'Content-Type: application/x-www-form-urlencoded','content' => http_build_query($data)]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
3. 发送 POST 请求(JSON 数据)
$url = 'https://api.example.com/submit';
$data = json_encode(['name' => 'Alice', 'age' => 30]);$options = ['http' => ['method' => 'POST','header' => "Content-Type: application/json\r\n",'content' => $data]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;

二、使用 cURL 扩展

功能更强大,支持 HTTPS、头部设置、文件上传等。

1. 基础 GET 请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.example.com/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应内容
$response = curl_exec($ch);
curl_close($ch);
echo $response;
2. 发送 POST 请求(表单数据)
$url = 'https://api.example.com/submit';
$data = ['username' => 'test', 'password' => '123456'];$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => http_build_query($data),CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded']
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
3. 发送 POST 请求(JSON 数据)
$url = 'https://api.example.com/submit';
$data = json_encode(['title' => 'Test', 'content' => 'Hello World']);$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data,CURLOPT_HTTPHEADER => ['Content-Type: application/json','Authorization: Bearer abc123xyz']
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

三、处理 HTTPS 与 SSL 验证

1. 忽略 SSL 证书验证(仅限测试环境)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
2. 指定 CA 证书
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');

四、文件上传

$filePath = '/path/to/file.jpg';
$data = ['file' => new CURLFile($filePath, 'image/jpeg', 'photo.jpg'),'description' => 'My photo'
];$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => 'https://api.example.com/upload',CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data,CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

五、处理 Cookies

1. 发送时携带 Cookies
curl_setopt($ch, CURLOPT_COOKIE, 'session_id=abc123; user_token=xyz789');
2. 保存响应 Cookies
curl_setopt($ch, CURLOPT_COOKIEJAR, '/path/to/cookies.txt'); // 保存到文件
curl_setopt($ch, CURLOPT_COOKIEFILE, '/path/to/cookies.txt'); // 读取 Cookies

六、高级配置

1. 设置超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 30 秒超时
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 连接超时 10 秒
2. 处理重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随重定向
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // 最大重定向次数
3. 获取响应头信息
curl_setopt($ch, CURLOPT_HEADER, true); // 包含头信息在输出中$response = curl_exec($ch);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);echo "Headers:\n$headers\nBody:\n$body";

七、错误处理

$ch = curl_init();
// ... 设置选项 ...$response = curl_exec($ch);
if ($response === false) {$error = curl_error($ch);$errno = curl_errno($ch);echo "cURL 错误 ($errno): $error";
} else {$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);echo "HTTP 状态码: $httpCode\n响应内容:\n$response";
}
curl_close($ch);

八、完整示例:调用 REST API

function callApi($url, $method = 'GET', $data = null, $headers = []) {$ch = curl_init();$options = [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_CUSTOMREQUEST => strtoupper($method),CURLOPT_HTTPHEADER => $headers];if ($method !== 'GET' && $data !== null) {$options[CURLOPT_POSTFIELDS] = is_array($data) ? json_encode($data) : $data;}curl_setopt_array($ch, $options);$response = curl_exec($ch);$error = curl_error($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);return ['code' => $httpCode,'data' => json_decode($response, true),'error' => $error];
}// 调用示例
$result = callApi('https://api.example.com/users','POST',['name' => 'Alice', 'email' => 'alice@example.com'],['Content-Type: application/json', 'Authorization: Bearer token123']
);print_r($result);

注意事项

  1. 安全建议
    • 生产环境务必启用 SSL 证书验证
    • 敏感数据(如 API 密钥)不要硬编码在代码中
    • 对用户输入做严格过滤
  2. 性能优化
    • 复用 cURL 句柄(使用 curl_init() 一次,多次请求)
    • 设置合理的超时时间
  3. 第三方库推荐
    如需更复杂功能,可使用:
    • Guzzle HTTPcomposer require guzzlehttp/guzzle
    • Symfony HTTP Clientcomposer require symfony/http-client

相关文章:

第十四章-PHP与HTTP协议

第十四章-PHP与HTTP协议 一&#xff0c;HTTP 协议详解 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的协议之一&#xff0c;用于客户端&#xff08;如浏览器&#xff09;与服务器之间的通信。它是 Web 技术的基石…...

【阿里云大模型高级工程师ACP学习笔记】2.6.用插件扩展答疑机器人的能力边界

一、学习目标 备考阿里云大模型高级工程师ACP认证,深入学习《2.6.用插件扩展答疑机器人的能力边界》这部分内容,主要期望达成以下目标: 理解智能体应用核心概念:理解智能体(Agent)应用的核心概念,包括其如何拓展大模型能力,突破传统答疑机器人局限。掌握构建Agent系统…...

用远程代理模式轻松实现远程服务调用,打开编程新大门

通过远程代理来实现一个简易的远程过程调用实例。带你打开新的大门。 Socket 远程代理服务案例 基于 Socket 的远程服务&#xff0c;我们需要完成以下步骤&#xff1a; 服务端实现&#xff1a;创建一个远程服务&#xff0c;通过 Socket 接受客户端请求并提供计算服务。 客户端…...

(001)Excel 快捷键

文章目录 时间 时间 当前日期&#xff1a;ctrl ; (分号)。当前时间&#xff1a;ctrl Shift ; (分号)。...

TMI投稿指南(二):投稿文章注意事项

文章结构&#xff1a; https://journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/create-the-text-of-your-article/structure-your-article/ 补充材料&#xff1a;准备补充材料 - IEEE 作者中心期刊 --- Prepare Supplementary Materials - IEEE Author…...

从困局到破局的AI+数据分析

从困局到破局的AI数据分析 困局&#xff1a;数据分析的四道高墙破局&#xff1a;AI赋能全流程数据分析远见&#xff1a;AI数据分析的革命性意义 数据是新时代的石油&#xff0c;人工智能是炼油厂。当两者强强联合&#xff0c;一场数据分析的革命正悄然发生。 多少次你面对Excel…...

12. RANSAC点云多平面拟合分割

本文看了博客RANSAC点云多平面拟合分割-CSDN博客的文章&#xff0c;该博客将多平面拟合分割讲的很详细了&#xff0c;这里只是作为笔记用。 1.RANSAC算法原理 三维平面拟合&#xff08;最小二乘法&#xff09; 具体实现见下面代码&#xff1a; def SVD(points):# 二维&#…...

Prompt

提示工程指南 | Prompt Engineering GuideGoogle 官方提示工程 (Prompt Engineering)白皮书 | 宝玉的分享https://www.geeksforgeeks.org/what-is-prompt-engineering-the-ai-revolution/Prompt Engineering for Reasoning ModelsPrompt Engineering with Reasoning Models 1.p…...

[特殊字符] SpringCloud项目中使用OpenFeign进行微服务远程调用详解(含连接池与日志配置)

&#x1f4da; 目录 为什么要用OpenFeign&#xff1f; 在cart-service中整合OpenFeign 2.1 引入依赖 2.2 启用OpenFeign 2.3 编写Feign客户端 2.4 调用Feign接口 开启连接池&#xff0c;优化Feign性能 3.1 引入OkHttp 3.2 配置启用OkHttp连接池 3.3 验证连接池生效 Feign最佳…...

迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎

4月28日&#xff0c;迈瑞医疗&#xff08;300760.SZ&#xff09;发布2024年年度报告。报告期内&#xff0c;公司实现营业收入367.26亿元&#xff0c;同比增长5.14%&#xff1b;实现归母净利润116.68亿元&#xff0c;同比增长0.74%&#xff1b;经营活动产生的现金流量净额124.25…...

「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起

温馨提示&#xff1a;运营团队2025年最新原创报告&#xff08;共210页&#xff09; —— 正文&#xff1a; 近日&#xff0c;国内智驾芯片上市公司[地平线]创始人兼CEO余凯&#xff08;先生&#xff09;接受腾讯新闻访谈时&#xff0c;提到如今大火的人形机器人&#xff0c;核…...

R 语言科研绘图第 43 期 --- 桑基图-冲击

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…...

SpringBoot应用原生或docker镜像容器集成Skywalking

相关组件及版本 序号 组件 版本 备注 1 skywalking-oap-server 8.9.1 2 elasticsearch 7.17.6 3 skywalking-ui 8.9.1 4 apache-skywalking-java-agent 8.15.0 一、JAR包方式部署服务 下载apache-skywalking-java-agent jar文件 使用如下名称执行 java \ -j…...

模板--进阶

1. 非类型模板参数 模板解决了两类问题 1控制数据类型 2控制某种设计逻辑 类域可以直接访问什么&#xff1f; 1static修饰的静态成员变量 2typedef定义的内嵌类型 3 内部类 下面我们就要引出一个模板的知识点----------再用类模板的时候从类模板里面去取东西的时候 要…...

PostgreSQL无法查看表中数据问题排查

在 PostgreSQL 中&#xff0c;恢复数据库后&#xff0c;使用 DBeaver 等工具可以看到数据库和表名&#xff0c;但无法查询到表中数据&#xff0c;可能是以下原因之一。以下是可能的原因和解决方法&#xff1a; 1. 恢复未完全成功 原因&#xff1a;数据库恢复过程中可能未完全成…...

实验研究 | 千眼狼高速摄像机驱动精密制造创新

研究背景 小模数齿轮作为精密制造领域的核心组件&#xff0c;以“结构紧凑、重量轻、精度高”等优势&#xff0c;广泛应用于航空航天、工业机器人、精密仪器、医疗设备、新能源和微电机等领域。传统抛光技术效率低、成本高、表面质量不足&#xff0c;电解等离子体抛光技术&am…...

AWS虚拟专用网络全解析:从基础到高级实践

导语 AWS虚拟专用网络是连接企业本地数据中心与AWS云环境的关键桥梁。本文将深入探讨AWS VPN的核心概念、配置方法、最佳实践以及常见问题解决方案,助您构建安全、可靠的混合云网络架构。 一、AWS VPN概述 1. 定义 AWS VPN是一种网络服务,允许用户通过加密隧道将本地网络…...

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能 北京海特伟业科技有限公司任洪卓发布于2025年4月28日 在数字化转型浪潮下&#xff0c;IP应急广播呼叫对讲广播系统凭借其网络化、智能化、融合化、多元化等优势&#xff0c;已…...

我的HTTP和HTTPS

注释&#xff1a;本文章架构跟随小林coding&#xff0c;在此基础上加深个人理解 小林coding&#xff1a;https://xiaolincoding.com/network/2_http/http_interview.html HTTP基本概念 HTTP是什么&#xff1f; http的中文名是超文本传输协议&#xff0c;超文本就是html&…...

python_股票月数据趋势判断

目录 前置 代码 视频&月数据 前置 1 A股月数据趋势大致判断&#xff0c;做一个粗略的筛选 2 逻辑&#xff1a; 1&#xff09;取最近一次历史最高点 2&#xff09;以1&#xff09;中最高点为分界点&#xff0c;只看右侧数据&#xff0c;取最近一次最低点 3&#xf…...

计算机考研精炼 计网

第 19 章 计算机网络体系结构 19.1 基本概念 19.1.1 计算机网络概述 1.计算机网络的定义、组成与功能 计算机网络是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 …...

大数据应用开发和项目实战-Matplotlib

Matplotlib的介绍 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Matplotlib 可以用来绘制各种静态&#xff0c;动态&#xff0c;交互式的图表。比如说散点图、柱状图等等。 Matplotlib的安装与…...

SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南

在数据工程领域&#xff0c;构建和维护数据转换管道是一项复杂而关键的任务。SQLMesh 是一个强大的工具&#xff0c;可以帮助你简化这一过程。本文将带你快速了解如何使用 SQLMesh CLI 来构建和维护数据转换管道。本文的目标是在 30 分钟或更短的时间内&#xff0c;让你熟悉 SQ…...

行政区划代码

本文数据来源&#xff1a;中华人民共和国民政部 在平常数据研究和开发中&#xff0c;经常会用到行政区划代码。而行政区划代码的使用&#xff0c;因年份不同可能也不尽完全相同。故整理了1980年到2024年所有的行政区划代码。 这样不仅仅适用于研究区划代码的变更研究&#xf…...

Spring生命周期

在Spring框架中&#xff0c;Bean的生命周期指的是从Bean的创建到销毁的整个过程。这个过程包括了多个阶段&#xff0c;每个阶段都有特定的操作。下面是一个典型的Spring Bean生命周期的概述&#xff1a; 一. 实例化&#xff08;Instantiation&#xff09; 当Spring容器启动时&…...

前端连接websocket服务报错 Unexpected response code: 301

前端连接websocket服务报错 Unexpected response code: 301 引直连测试301重定向修改nginx配置 引 websocket后端服务正常&#xff0c;监听正常&#xff0c;可以通过简单的前端代码进行连接&#xff0c;但是通过nginx反向代理后报错Error during WebSocket handshake: Unexpec…...

C语言(5)—操作符详解

文章目录 一、操作符分类概览二、二进制与进制转换2.1 进制基本概念 三、原码、反码与补码3.1 基本概念 四、位操作符详解 一、操作符分类概览 C语言中的操作符可以分为以下几大类&#xff1a; 算术操作符&#xff1a;, -, *, /, % 移位操作符&#xff1a;<<, >>…...

ubuntu新增磁盘挂载

1. 确认新磁盘 使用 lsblk 命令查看系统中所有的块设备&#xff0c;找出新增的磁盘。 rootzzwl:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 60G 0 disk ├─sda1 8:1 0 …...

【计网】计算机网络的类别与性能

一、计算机网络的分类 计算机网络可以根据不同的标准进行分类。下面是两种常见的分类方法&#xff1a; 1.按照网络的作用范围进行分类 广域网 (WAN): 广域网覆盖的范围非常广泛&#xff0c;通常跨越城市、国家或甚至是全球。WAN主要用于连接地理位置相隔较远的计算机和网络设…...

Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理

在Java反射机制中&#xff0c;访问对象的int类型字段值&#xff08;如field.getInt(object)&#xff09;的底层实现涉及JVM对内存偏移量的计算与直接内存访问。本文通过分析OpenJDK 17源码&#xff0c;揭示这一过程的核心实现逻辑。 一、字段偏移量计算 1. Java层初始化偏移量…...

香橙派打包qt文件报错“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案

PyQt 报错总结&#xff1a;打包文件过程&#xff0c;“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案全解析 在使用 PyQt5 搭建图形界面时&#xff0c;打包文件的过程中出现的问题&#xff0c;真难绷&#xff0c;搞了半天。 Qt 平台插件 xcb 无法加载QOb…...

Flutter 学习之旅 之 flutter 作为 module ,在 Android 的界面中嵌入Flutter界面功能的简单整理

Flutter 学习之旅 之 flutter 作为 module &#xff0c;在 Android 的界面中嵌入Flutter界面功能的简单整理 目录 Flutter 学习之旅 之 flutter 作为 module &#xff0c;在 Android 的界面中嵌入Flutter界面功能的简单整理 一、简单介绍 二、在同一个布局中同时显示 Androi…...

在android 系统上qnn sdk转换,运行模型示例

前面讲了如何配置qnn sdk的环境&#xff0c;这一篇总结下qnn 实际转换一个onnx 模型&#xff0c;并运行的实现步骤。 设备&#xff1a; 1. ubuntu22.04 的Linux 服务器。 2. 一台android手机。 一、下载模型 from optimum.onnxruntime import ORTModelForSequenceClassifi…...

docker安装Canal1.1.5,MySQL5.7踩坑

docker安装Canal 前情提示安装MySQLdocker安装MySQL1. 拉取镜像2. 创建容器映射宿主机目录3. docker run 配置mysql重启mysql新建canal用户 安装Canal创建docker网络安装Canal1.拉取canal镜像2.创建目录3.运行容器 踩坑问题1 前情提示 关于版本问题&#xff0c;官方也没有详细…...

SpringBoot 接口国际化i18n 多语言返回 中英文切换 全球化 语言切换

介绍 Spring Boot通过MessageSource接口来实现国际化&#xff0c;它可以加载不同的消息资源文件&#xff0c;通常是.properties格式。通过定义不同的语言文件&#xff08;例如&#xff1a;messages_en.properties、messages_zh.properties等&#xff09;&#xff0c;可以根据用…...

C++ 嵌套类 (详解 一站式讲解)

目录 嵌套类 嵌套类的定义 嵌套类结构的访问权限 pimpl模式&#xff08;了解&#xff09; 嵌套类 嵌套类的定义 首先介绍两个概念&#xff1a; 类作用域&#xff08;Class Scope&#xff09; 类作用域是指在类定义内部的范围。在这个作用域内定义的成员&#xff08;包括…...

EasyCVR视频汇聚平台助力大型生产监控项目摄像机选型与应用

一、方案背景 在300路大型生产监控项目中&#xff0c;由于生产环境复杂多样&#xff0c;涵盖室外厂区、大型车间、室内办公区域等不同场景&#xff0c;单一类型的摄像机难以满足全方位、精细化的监控需求。EasyCVR作为一款功能强大的视频融合管理平台&#xff0c;具备灵活的视…...

解决leensa无法使用的办法:平替教程

Leensa已经完全连不上&#xff0c;并显示超时&#xff0c;至于之前有传言称他们会恢复服务也完全是无稽之谈。 那么&#xff0c;Leensa停止服务后&#xff0c;广大的外贸人&#xff0c;设计人&#xff0c;留学生以及技术人学习&#xff0c;查资料以及开发客户该怎么办呢&#…...

算法思想之哈希表

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之哈希表 发布时间&#xff1a;2025.4.28 隶属专栏&#xff1a;算法 目录 算法介绍哈希表作用什么时候使用哈希表怎么使用哈希表 例题两数之和题目链接题目描述算法思路代码实现 判定是否互为字符重排题目链…...

springboot 视频分段加载在线播放

页面访问视频资源 前端播放加载部分视频,每次选中一个时间点后 往后加载一部分视频,主要用以节省网络传输的数据量 通过ResourceHttpRequestHandler类实现&#xff0c;ResourceHttpRequestHandler支持分片加载&#xff0c;前端请求头中携带Range: bytes 0-10001&#xff0c;就…...

【题解-Acwing】868. 筛质数

题目:868. 筛质数 题目描述 给定一个正整数 n,请你求出 1∼n 中质数的个数。 输入 共一行,包含整数 n。 输出 共一行,包含一个整数,表示 1∼n 中质数的个数。 数据范围 1 ≤ n ≤ 106 时空限制 0.2s / 64MB 输入样例 8输出样例 4代码 #include...

java 和 C#操作数据库对比

Java和C#在操作数据库方面有诸多相似之处&#xff0c;但也存在一些差异&#xff0c;以下从几个方面为你进行对比&#xff1a; 数据库连接 Java 在Java中&#xff0c;使用JDBC&#xff08;Java Database Connectivity&#xff09;来连接数据库。连接数据库的步骤通常包括加载…...

用 Python打造交互式图片-音视频管理器:代码分析与实践

在 Python 的 GUI 开发领域&#xff0c;wxPython 是一个功能强大且跨平台的框架&#xff0c;适合快速构建桌面应用程序。本文将深入分析一个基于 wxPython 的交互式图片管理器项目&#xff08;SelectModelToPlayVideoAndAudio.py&#xff09;&#xff0c;该程序允许用户管理图片…...

Django 缓存框架

动态网站的一个基本权衡是它们是动态的。每当用户请求页面时&#xff0c;Web 服务器进行各种计算&#xff0c;从数据库查询到模板渲染到业务逻辑&#xff0c;以创建您网站访问者看到的页面。从处理开销的角度来看&#xff0c;这比标准的从文件系统中读取文件的服务器安排要昂贵…...

后缀数组~

子串&#xff1a;在字符串s中&#xff0c;取任意i<j,那么在s中截取从i到j的这一段就叫做s的一个子串。 后缀&#xff1a;后缀就是从字符串的某个位置i到字符串末尾的子串&#xff0c;我们定义以s的第i个字符为第一个元素的后缀为suff(i)。 suff(1)就是从第一个字符到最后一个…...

Rust 学习笔记:编程练习(一)

Rust 学习笔记&#xff1a;编程练习&#xff08;一&#xff09; Rust 学习笔记&#xff1a;编程练习&#xff08;一&#xff09;Convert temperatures between Fahrenheit and CelsiusGenerate the nth Fibonacci numberPrint the lyrics to the Christmas carol “The Twelve …...

【基础知识】常见的计算公式(一)

目录标题 定时器相关公式1. 定时器分频系数计算2. 定时器定时时间计算 波特率相关公式1. 异步串行通信波特率计算 PWM 相关公式1. PWM 占空比计算 不知道你们是不是和我一样,对定时器中的分频系数相关的计算公式,波特率计算公式等,都有点心生畏惧,其核心原因是不清楚不了解,没有…...

【AI生产力工具】Windsurf,一款AI编程工具

Windsurf 是 Codeium 公司推出的一款 AI 编程助手,它是一款集成深度上下文感知、多模型协作和实时代码管理的综合开发环境(IDE)。 Windsurf 作为 AI 编程工具的核心价值在于 “上下文感知 + 多模型协作 + 自动化工作流”,其深度集成的智能体系统(如 Flows 和 Cascade)正…...

【网络原理】TCP提升效率机制(三):延时应答和捎带应答

目录 一. 延时应答 二. 捎带应答 一. 延时应答 延时应答也是基于滑动窗口的一种提升传输效率的方式&#xff08;减少ACK数量&#xff09; 接收方收到数据之后&#xff0c;不会立刻返回一个ACK确认报文&#xff0c;而是等一会再返回ACK报文 这样做的好处&#xff1f; 1&…...

Golang|分布式索引架构

当文档数量巨大时&#xff0c;如一亿个文档&#xff0c;倒排索引难以全部放入单机内存。正排索引将热数据和冷数据分别存储在内存和磁盘中。分布式搜索引擎将数据分布在不同服务器上以应对大量数据。 倒排索引的水平切分 水平切分按关键词划分数据&#xff0c;如JAVA和算法在A服…...