概述Private Network Access(PNA)限制公共网络上下文访问私有/本地地址空间的资源,要求在跨地址空间时通过预检(preflight)显式授权,以降低 CSRF/隐私风险。Chrome 等浏览器按阶段推进强制策略,站点需迁移到 HTTPS 并正确处理预检请求。机制与用法地址空间:浏览器将目标按 `local`(回环/链路本地)、`private`(RFC1918 私网)与 `public` 分类;当 `public → private/local` 时触发 PNA 预检。预检要求:在 CORS 预检的基础上,服务器需返回允许私网访问的头部,并满足来源校验与 HTTPS 要求。典型头部:`Access-Control-Allow-Origin: https://example.com``Access-Control-Allow-Methods: GET, POST``Access-Control-Allow-Headers: ...``Access-Control-Allow-Private-Network: true`(用于允许公共到私网的访问,需浏览器支持)部署建议:对内网 API 提供反向代理与证书,使外部页面在 HTTPS 上下文访问;对旧系统逐步限流并迁移。示例:Nginx 处理 PNA/CORS 预检location /api/ { if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin "https://example.com"; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Headers "Content-Type, Authorization"; add_header Access-Control-Max-Age 600; add_header Access-Control-Allow-Private-Network "true"; return 204; } add_header Access-Control-Allow-Origin "https://example.com"; proxy_pass http://10.0.0.5:8080; } 示例:前端 fetch(公共页面访问私网)const resp = await fetch('https://gateway.example.com/api/status', { method: 'GET', credentials: 'include' }) const data = await resp.json() 工程建议强制 HTTPS:浏览器逐步要求公共上下文为 HTTPS;同时为网关/反代配置证书与 HSTS。明确来源:仅允许受信任来源访问内网 API;对凭证(cookies/headers)严格校验。渐进迁移:为旧系统提供只读代理与速率限制,观察错误上报与用户影响。监控与告警:收集 PNA 相关失败(DevTools/日志),在浏览器策略升级前完成整改。参考与验证Private Network Access 说明(Chrome docs):https://developer.chrome.com/blog/private-network-access-update/WHATWG Fetch 相关讨论与草案:https://fetch.spec.whatwg.org/MDN CORS 文档:https://developer.mozilla.org/docs/Web/HTTP/CORS

发表评论 取消回复