HTTP/HTTPS协议与跨域解决方案实战指南
在日常开发中HTTP/HTTPS协议和跨域问题是后端工程师必须掌握的核心知识。无论是API接口设计、微服务通信还是前后端分离架构都会频繁涉及这些概念。本文将从实际开发场景出发完整拆解HTTP明文传输、HTTPS加密机制、同源策略原理并提供多种跨域解决方案的实战代码。1. HTTP协议基础与工作原理1.1 HTTP协议概述HTTPHyperText Transfer Protocol是互联网上应用最为广泛的应用层协议它定义了客户端和服务器之间通信的格式和规则。HTTP协议基于请求-响应模型采用明文传输方式默认使用80端口。HTTP协议的主要特点包括无状态每次请求都是独立的服务器不保存客户端的状态信息无连接每次连接只处理一个请求响应完成后立即断开简单快速通信方式简单传输效率高灵活允许传输任意类型的数据对象1.2 HTTP报文结构详解HTTP报文分为请求报文和响应报文两种类型每种报文都包含起始行、头部字段和消息体三部分。HTTP请求报文示例GET /api/users HTTP/1.1 Host: api.example.com User-Agent: Mozilla/5.0 Accept: application/json Content-Type: application/json Content-Length: 45 {username: test, password: 123456}HTTP响应报文示例HTTP/1.1 200 OK Content-Type: application/json Content-Length: 78 Date: Mon, 23 Jan 2023 10:30:45 GMT {code: 200, message: success, data: {id: 1, name: test}}1.3 HTTP方法详解HTTP定义了多种请求方法每种方法都有特定的语义GET获取资源参数通过URL传递有长度限制POST提交数据参数在请求体中无长度限制PUT更新完整资源PATCH部分更新资源DELETE删除资源HEAD获取响应头信息OPTIONS查询服务器支持的请求方法1.4 HTTP状态码分类HTTP状态码用于表示请求的处理结果分为5大类1xx信息性状态码请求已被接收继续处理2xx成功状态码请求成功处理3xx重定向状态码需要进一步操作以完成请求4xx客户端错误状态码客户端请求有错误5xx服务器错误状态码服务器处理请求出错常见状态码说明200 OK请求成功301 Moved Permanently永久重定向400 Bad Request请求语法错误401 Unauthorized需要身份验证403 Forbidden服务器拒绝请求404 Not Found资源不存在500 Internal Server Error服务器内部错误502 Bad Gateway网关错误2. HTTPS加密传输机制2.1 HTTPS协议原理HTTPSHyperText Transfer Protocol Secure是在HTTP基础上加入SSL/TLS加密层的安全协议默认使用443端口。HTTPS通过加密传输数据防止数据在传输过程中被窃取或篡改。HTTPS的核心优势数据加密传输内容经过加密防止中间人攻击身份认证通过证书验证服务器身份数据完整性防止数据在传输过程中被篡改2.2 SSL/TLS握手过程HTTPS建立安全连接需要经过SSL/TLS握手过程客户端Hello客户端向服务器发送支持的加密套件列表和随机数服务器Hello服务器选择加密套件发送证书和随机数证书验证客户端验证服务器证书的合法性密钥交换双方通过非对称加密协商对称加密密钥加密通信使用对称加密密钥进行安全通信2.3 HTTP与HTTPS性能对比虽然HTTPS增加了加密解密开销但现代硬件优化和HTTP/2协议的使用已经大大缩小了性能差距特性HTTPHTTPS安全性明文传输不安全加密传输安全端口80443性能较快稍慢现代优化后差距很小SEO优化无优势搜索引擎排名有优势证书不需要需要SSL证书2.4 实战配置HTTPS服务器以下是在Nginx中配置HTTPS的示例# /etc/nginx/conf.d/ssl.conf server { listen 443 ssl http2; server_name example.com; # SSL证书配置 ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; # SSL协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # HSTS头强制使用HTTPS add_header Strict-Transport-Security max-age63072000 always; location / { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # HTTP重定向到HTTPS server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }3. 同源策略与跨域问题3.1 同源策略定义同源策略Same-Origin Policy是浏览器的重要安全机制它限制一个源协议域名端口的文档或脚本如何与另一个源的资源进行交互。同源判断规则协议相同http/https域名相同包括子域名端口相同示例http://a.com与https://a.com→ 不同源协议不同http://a.com与http://b.com→ 不同源域名不同http://a.com:80与http://a.com:8080→ 不同源端口不同3.2 跨域请求的限制范围同源策略主要限制以下操作AJAX请求XMLHttpRequest、Fetch APICookie、LocalStorage、IndexedDB访问DOM操作iframe跨域访问Web字体加载Web Workers脚本3.3 常见的跨域错误示例在实际开发中常见的跨域错误包括// 前端代码示例 fetch(https://api.example.com/data, { method: GET, headers: { Content-Type: application/json } }) .then(response response.json()) .then(data console.log(data)) .catch(error console.error(跨域错误:, error));浏览器控制台错误信息Access to fetch at https://api.example.com/data from origin https://www.mysite.com has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource.4. CORS跨域资源共享解决方案4.1 CORS机制原理CORSCross-Origin Resource Sharing是W3C标准允许服务器声明哪些源可以访问资源。CORS通过HTTP头来实现跨域访问控制。CORS请求分为两类简单请求使用GET、HEAD、POST方法且Content-Type为特定值预检请求非简单请求需要先发送OPTIONS请求进行预检4.2 服务端CORS配置Spring Boot配置示例// CORS配置类 Configuration public class CorsConfig { Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/api/**) .allowedOrigins(https://www.mysite.com, https://admin.mysite.com) .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowedHeaders(*) .allowCredentials(true) .maxAge(3600); } }; } }Node.js Express配置示例const express require(express); const cors require(cors); const app express(); // CORS中间件配置 app.use(cors({ origin: [https://www.mysite.com, https://admin.mysite.com], methods: [GET, POST, PUT, DELETE, OPTIONS], allowedHeaders: [Content-Type, Authorization], credentials: true, maxAge: 3600 })); // 或者手动设置CORS头 app.use((req, res, next) { res.header(Access-Control-Allow-Origin, https://www.mysite.com); res.header(Access-Control-Allow-Methods, GET, POST, PUT, DELETE, OPTIONS); res.header(Access-Control-Allow-Headers, Content-Type, Authorization); res.header(Access-Control-Allow-Credentials, true); res.header(Access-Control-Max-Age, 3600); if (req.method OPTIONS) { return res.status(200).end(); } next(); });4.3 预检请求处理对于非简单请求浏览器会先发送OPTIONS预检请求// Spring Boot中处理OPTIONS请求 RestController public class ApiController { RequestMapping(value /api/data, method RequestMethod.OPTIONS) public ResponseEntity? handleOptions() { return ResponseEntity.ok().build(); } PostMapping(/api/data) public ResponseEntityMapString, Object createData(RequestBody Data data) { // 业务逻辑处理 return ResponseEntity.ok(Collections.singletonMap(status, success)); } }5. 其他跨域解决方案5.1 JSONP跨域方案JSONP利用script标签不受同源策略限制的特性实现跨域// 前端JSONP实现 function jsonp(url, callback) { const callbackName jsonp_callback_ Math.round(100000 * Math.random()); window[callbackName] function(data) { delete window[callbackName]; document.body.removeChild(script); callback(data); }; const script document.createElement(script); script.src url (url.indexOf(?) 0 ? : ?) callback callbackName; document.body.appendChild(script); } // 使用示例 jsonp(https://api.example.com/data?paramvalue, function(data) { console.log(收到数据:, data); });// 服务端JSONP支持 RestController public class JsonpController { GetMapping(/api/jsonp-data) public String getJsonpData(RequestParam String callback, RequestParam String param) { String data {\result\: \success\, \param\: \ param \}; return callback ( data ); } }5.2 代理服务器方案通过同源服务器代理转发请求解决跨域问题Nginx反向代理配置server { listen 80; server_name www.mysite.com; location /api/ { # 代理到后端API服务器 proxy_pass https://api.example.com/; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 处理CORS头 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers *; if ($request_method OPTIONS) { return 204; } } location / { # 静态资源服务 root /var/www/html; index index.html; } }Node.js代理服务器示例const express require(express); const { createProxyMiddleware } require(http-proxy-middleware); const app express(); // 静态资源服务 app.use(express.static(public)); // API代理配置 app.use(/api, createProxyMiddleware({ target: https://api.example.com, changeOrigin: true, pathRewrite: { ^/api: / }, onProxyRes: function(proxyRes, req, res) { // 添加CORS头 proxyRes.headers[Access-Control-Allow-Origin] *; proxyRes.headers[Access-Control-Allow-Methods] GET, POST, PUT, DELETE, OPTIONS; proxyRes.headers[Access-Control-Allow-Headers] Content-Type, Authorization; } })); app.listen(3000, () { console.log(代理服务器运行在端口3000); });5.3 WebSocket跨域通信WebSocket协议本身支持跨域但服务器需要验证Origin头// 前端WebSocket连接 const socket new WebSocket(wss://api.example.com/ws); socket.onopen function(event) { console.log(WebSocket连接已建立); socket.send(JSON.stringify({type: auth, token: user-token})); }; socket.onmessage function(event) { const data JSON.parse(event.data); console.log(收到消息:, data); }; // Node.js WebSocket服务器 const WebSocket require(ws); const server new WebSocket.Server({ port: 8080, verifyClient: function(info, callback) { // 验证Origin const allowedOrigins [https://www.mysite.com, https://admin.mysite.com]; if (allowedOrigins.includes(info.origin)) { callback(true); } else { callback(false, 403, Forbidden); } } }); server.on(connection, function connection(ws, req) { ws.on(message, function incoming(message) { console.log(收到消息:, message); // 处理业务逻辑 ws.send(JSON.stringify({status: received})); }); });6. 生产环境最佳实践6.1 安全配置建议CORS安全配置Configuration public class SecurityCorsConfig { Value(${cors.allowed-origins}) private String[] allowedOrigins; Bean public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList(allowedOrigins)); configuration.setAllowedMethods(Arrays.asList(GET, POST, PUT, DELETE)); configuration.setAllowedHeaders(Arrays.asList(Authorization, Content-Type)); configuration.setAllowCredentials(true); configuration.setMaxAge(1800L); // 30分钟 UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration(/api/**, configuration); return source; } }HTTPS安全配置# 强化SSL配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 安全头配置 add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock; add_header Strict-Transport-Security max-age63072000; includeSubDomains; preload;6.2 性能优化策略连接复用优化// HTTP客户端连接池配置 Configuration public class HttpClientConfig { Bean public CloseableHttpClient httpClient() { PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager(); connectionManager.setMaxTotal(100); connectionManager.setDefaultMaxPerRoute(20); RequestConfig requestConfig RequestConfig.custom() .setConnectTimeout(5000) .setSocketTimeout(10000) .setConnectionRequestTimeout(2000) .build(); return HttpClients.custom() .setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig) .build(); } }CDN加速配置# 静态资源CDN优化 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control public, immutable; add_header Access-Control-Allow-Origin *; # CDN回源配置 proxy_pass https://cdn.example.com; proxy_set_header Host cdn.example.com; }6.3 监控与日志记录跨域请求监控Component public class CorsRequestInterceptor implements HandlerInterceptor { private static final Logger logger LoggerFactory.getLogger(CorsRequestInterceptor.class); Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String origin request.getHeader(Origin); String method request.getMethod(); if (OPTIONS.equals(method)) { logger.info(预检请求 - Origin: {}, Method: {}, origin, method); } else if (origin ! null !origin.isEmpty()) { logger.info(跨域请求 - Origin: {}, Path: {}, origin, request.getRequestURI()); } return true; } }HTTPS证书监控#!/bin/bash # SSL证书过期监控脚本 check_ssl_cert() { domain$1 port${2:-443} end_date$(openssl s_client -connect $domain:$port -servername $domain 2/dev/null | \ openssl x509 -noout -enddate | cut -d -f2) end_epoch$(date -d $end_date %s) current_epoch$(date %s) days_remaining$(( ($end_epoch - $current_epoch) / 86400 )) if [ $days_remaining -lt 30 ]; then echo 警告: $domain SSL证书将在$days_remaining天后过期 # 发送告警通知 else echo 正常: $domain SSL证书剩余$days_remaining天 fi } # 检查多个域名 check_ssl_cert api.example.com 443 check_ssl_cert www.example.com 4437. 常见问题排查指南7.1 CORS配置问题排查问题1预检请求失败OPTIONS https://api.example.com/data 404 (Not Found)解决方案确保服务器正确处理OPTIONS请求问题2凭证模式下的CORS错误Access-Control-Allow-Origin cannot use wildcard * when credentials flag is true解决方案设置具体的允许源而不是通配符// 错误配置 configuration.setAllowedOrigins(Arrays.asList(*)); configuration.setAllowCredentials(true); // 正确配置 configuration.setAllowedOrigins(Arrays.asList(https://www.mysite.com)); configuration.setAllowCredentials(true);7.2 HTTPS证书问题问题证书验证失败SSL certificate problem: unable to get local issuer certificate解决方案更新CA证书包或跳过证书验证仅测试环境// 测试环境跳过证书验证生产环境禁用 Bean public RestTemplate restTemplate() throws Exception { SSLContext sslContext new SSLContextBuilder() .loadTrustMaterial(null, (certificate, authType) - true).build(); HttpClient client HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build(); HttpComponentsClientHttpRequestFactory requestFactory new HttpComponentsClientHttpRequestFactory(client); return new RestTemplate(requestFactory); }7.3 跨域缓存问题问题CORS配置修改后不生效解决方案清理浏览器缓存或设置合适的缓存时间// 设置适当的Max-Age configuration.setMaxAge(1800L); // 30分钟便于调试 // 生产环境可以设置更长 configuration.setMaxAge(86400L); // 24小时8. 实际项目集成示例8.1 Spring Boot微服务跨域配置多环境CORS配置# application.yml cors: allowed-origins: dev: http://localhost:3000,http://127.0.0.1:3000 test: https://test.mysite.com prod: https://www.mysite.com,https://admin.mysite.comConfiguration EnableWebMvc public class WebMvcConfig implements WebMvcConfigurer { Value(${cors.allowed-origins}) private String allowedOrigins; Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/api/**) .allowedOrigins(allowedOrigins.split(,)) .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowedHeaders(*) .allowCredentials(true) .maxAge(3600); registry.addMapping(/auth/**) .allowedOrigins(allowedOrigins.split(,)) .allowedMethods(POST, OPTIONS) .allowedHeaders(Content-Type, Authorization) .allowCredentials(true) .maxAge(1800); } }8.2 网关层统一CORS处理Spring Cloud Gateway配置spring: cloud: gateway: globalcors: cors-configurations: [/**]: allowed-origins: https://www.mysite.com,https://admin.mysite.com allowed-methods: GET,POST,PUT,DELETE,OPTIONS allowed-headers: * allow-credentials: true max-age: 36008.3 前端Axios统一配置// axios配置封装 import axios from axios; const apiClient axios.create({ baseURL: process.env.REACT_APP_API_BASE_URL, timeout: 10000, withCredentials: true, // 允许携带cookie }); // 请求拦截器 apiClient.interceptors.request.use( config { const token localStorage.getItem(auth_token); if (token) { config.headers.Authorization Bearer ${token}; } return config; }, error Promise.reject(error) ); // 响应拦截器 apiClient.interceptors.response.use( response response, error { if (error.response?.status 401) { // 处理认证失败 localStorage.removeItem(auth_token); window.location.href /login; } return Promise.reject(error); } ); export default apiClient;掌握HTTP/HTTPS协议原理和跨域解决方案是后端工程师的基本功。在实际项目中建议根据具体业务需求选择最合适的跨域方案同时注重安全性和性能优化。对于新项目优先使用CORS方案对于老项目改造可以考虑代理服务器方案。无论采用哪种方案都要确保配置的正确性和安全性。

相关新闻

从 0.1 到 26:一个运行时的十七年进化史

从 0.1 到 26:一个运行时的十七年进化史

2009 年 5 月 27 日,一个叫 Ryan Dahl 的年轻人往 GitHub 上推了第一个 commit。那是一个用 C 写的 JavaScript 运行时,把 Google 开源的 V8 引擎包了一层,加了一个事件循环和一个底层 I/O 接口。初始版本号 0.1.0,只跑在 Linux 和…

2026/10/12 3:07:25 阅读更多 →
C++20协程与Qt异步编程:QCoro库原理与实践指南

C++20协程与Qt异步编程:QCoro库原理与实践指南

1. 从异步回调到协程:为什么我们需要QCoro?如果你用Qt写过稍微复杂一点的网络请求、文件读写或者耗时计算,肯定对QNetworkReply、QFile、QTimer这些类的异步信号槽机制又爱又恨。爱的是它确实避免了界面卡死,恨的是代码写着写着就…

2026/10/12 23:34:29 阅读更多 →
企业AI知识库从零搭建实战:RAG管道、文档治理与效果调优

企业AI知识库从零搭建实战:RAG管道、文档治理与效果调优

去年帮一家中型制造企业搭了一套AI知识库,把散落在各个系统里的产品文档、操作SOP、技术方案和制度规范全部接入,员工用自然语言就能检索到准确答案。这篇文章把整个过程——从文档治理到RAG调优——完整复盘。一、为什么要做企业知识库 很多企业都有这…

2026/10/12 10:38:04 阅读更多 →

最新新闻

数据中心机柜温湿度精细化监测:分层多点以太网采集系统实践

数据中心机柜温湿度精细化监测:分层多点以太网采集系统实践

1. 从"空调没报警但服务器降频"说起:粗粒度监测的盲区到底在哪去年夏天做机房巡检时碰到一个很典型的案例:动环平台显示机房平均温度24.5℃,一个告警都没有,但监控大屏上某一排机柜的服务器核心温度持续走高&#xff0c…

2026/10/14 16:08:13 阅读更多 →
大模型落地不只是写提示词:企业用AI,算法工程师在解决哪4个问题

大模型落地不只是写提示词:企业用AI,算法工程师在解决哪4个问题

很多自媒体把“会用AI工具”讲得很简单,仿佛写几句提示词就能替代整个技术团队。实际企业落地时,算法工程师的工作量往往在工具背后:让模型懂业务、不出错、成本低、可审计。一、问题1:模型不了解企业内部数据通用大模型见过公开互…

2026/10/14 16:08:13 阅读更多 →
MCU直连CDC设备实战:CH32V307 USB Host枚举与批量收发

MCU直连CDC设备实战:CH32V307 USB Host枚举与批量收发

简介:这份资料面向嵌入式开发者与USB协议学习者,聚焦MCU作为USB Host识别并驱动CDC类设备这一实际难题,帮助打破传统RS232接口在嵌入式板卡上的技术壁垒。内容从插入检测、总线复位、NRZI编码与同步域讲起,逐步拆解SOP/EOP、PID类…

2026/10/14 16:08:13 阅读更多 →
2024网络安全产业人才发展报告深度拆解:岗位画像、薪资对照与AI技能缺口

2024网络安全产业人才发展报告深度拆解:岗位画像、薪资对照与AI技能缺口

简介:《2024年网络安全产业人才发展报告》面向政府决策者、企业管理者、教育机构以及网络安全从业者和学生,系统梳理全球与国内网络安全产业的人才供需现状,帮助读者把握行业趋势、规划职业路径与制定用人策略。报告涵盖从业人员画像、薪酬水…

2026/10/14 16:08:13 阅读更多 →
KRONE农业机械来料检验案例_大型部件为什么不再搬到质检区

KRONE农业机械来料检验案例_大型部件为什么不再搬到质检区

​农业机械制造商 KRONE 使用安宝特合作伙伴 Visometry 拓影 Twyn,把部分大型来料的视觉质量检查直接放在到货位置完成,无需为了常规 CAD 实物核对,先将工件统一搬运到专门质检区。​质检人员通过平板电脑将 3D CAD 设计状态与现场实物叠加&a…

2026/10/14 16:08:13 阅读更多 →
UK-5099在肿瘤代谢与线粒体功能研究中的应用指南

UK-5099在肿瘤代谢与线粒体功能研究中的应用指南

1. 项目概述UK-5099作为一种线粒体丙酮酸载体(MPC)抑制剂,近年来在肿瘤代谢研究和线粒体功能调控领域引起了广泛关注。这个实验指南旨在为科研人员提供从基础原理到实操细节的完整解决方案,帮助研究者快速掌握UK-5099在肿瘤微环境…

2026/10/14 16:07:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →