1. 请求转发与重定向的本质差异1.1 技术实现原理对比请求转发Forward发生在服务器内部本质是服务器端资源的跳转。当客户端发起请求后服务器通过RequestDispatcher将请求对象和响应对象传递给目标资源整个过程对客户端透明。典型代码实现如下request.getRequestDispatcher(/targetPage.jsp).forward(request, response);重定向Redirect则是客户端行为服务器返回302状态码和Location头部强制客户端发起新请求。关键特征包括浏览器地址栏URL变化两次完全独立的HTTP请求请求对象不共享response.sendRedirect(http://newdomain.com/target);1.2 性能与安全考量转发在性能上具有明显优势单次HTTP请求减少网络开销请求对象保持减少数据重建成本服务器内部通信无额外安全校验但重定向在以下场景不可替代需要切换协议HTTP→HTTPS域名迁移后的老地址跳转防止表单重复提交PRG模式关键经验涉及敏感参数传递时必须使用转发避免参数暴露在URL中。实测显示转发比重定向平均快300-500ms测试数据Tomcat9Chrome 1102. 同源策略的防御机制剖析2.1 同源判定标准详解同源策略Same-Origin Policy要求协议、域名、端口三者完全一致。以下是典型示例对照表当前URL目标URL是否同源原因https://example.comhttp://example.com否协议不同https://example.comhttps://api.example.com否子域名不同https://example.com:443https://example.com:8080否端口不同https://example.com/pathhttps://example.com/other是仅路径不同2.2 受限操作清单同源策略限制的核心操作包括XMLHttpRequest/Fetch跨域请求DOM访问iframe跨域通信Cookie/LocalStorage读取Web字体加载Web Workers脚本加载例外情况script、img等标签的src属性link标签的CSS加载表单提交但无法读取响应3. 跨域解决方案实战指南3.1 CORS深度配置服务端需设置以下响应头实现CORSadd_header Access-Control-Allow-Origin https://trusted.com; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With; add_header Access-Control-Max-Age 1728000;预检请求Preflight处理要点OPTIONS方法必须单独处理返回204状态码避免body传输严格校验Origin白名单踩坑记录IE10对CORS的支持存在缓存问题需要额外添加Pragma: no-cache头部3.2 JSONP实现与风险控制动态创建script标签实现跨域function handleResponse(data) { console.log(Received:, data); } const script document.createElement(script); script.src https://api.example.com/data?callbackhandleResponse; document.body.appendChild(script);安全防护措施严格校验callback参数格式仅允许字母数字设置Content-Type为application/javascript添加CSRF Token验证3.3 代理服务配置方案Nginx反向代理配置示例location /api/ { proxy_pass https://target-server.com/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cookie_domain target-server.com $host; }关键参数说明proxy_redirect处理重定向地址改写proxy_cookie_path维护会话状态proxy_ssl_verify关闭证书验证仅限测试环境4. 安全加固与性能优化4.1 跨域安全策略配置推荐的安全头部组合Content-Security-Policy: default-src self; X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: strict-origin-when-cross-origin4.2 性能优化技巧预加载优化link relpreconnect hrefhttps://cdn.example.com link reldns-prefetch hrefhttps://api.example.com缓存策略配置location ~* \.(js|css|png)$ { expires 365d; add_header Cache-Control public, immutable; }域名分片策略静态资源使用单独域名static.example.comAPI接口使用专用域名api.example.com主站保持www.example.com5. 实战问题排查手册5.1 常见错误代码解析错误现象可能原因解决方案CORS预检失败未处理OPTIONS方法添加OPTIONS路由处理证书错误混合内容HTTPS加载HTTP统一协议方案Cookie丢失SameSite属性限制设置SameSiteNone; Secure字体加载失败缺少Access-Control-Allow-Origin添加字体文件的CORS头5.2 浏览器调试技巧Chrome开发者工具关键功能Network面板查看请求头/响应头Application面板检查Cookie/StorageConsole面板过滤CORS错误使用--disable-web-security启动参数仅限开发Firefox特殊工具使用CORS Everywhere插件测试about:config修改security.fileuri.strict_origin_policy6. 架构设计建议6.1 微服务跨域方案Spring Cloud Gateway配置示例spring: cloud: gateway: globalcors: cors-configurations: [/**]: allowedOrigins: https://frontend.com allowedMethods: * allowedHeaders: * exposeHeaders: X-RateLimit-Remaining6.2 WebSocket跨域处理Nginx代理配置要点location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; }6.3 移动端特殊处理React Native解决方案配置metro.config.js允许非安全请求devOnly使用https://github.com/software-mansion-labs/react-native-ssl-pinning加固Flutter跨域注意Android需配置network_security_config.xmliOS需修改Info.plist的NSAppTransportSecurity我在实际项目中发现合理的跨域方案应该遵循最小权限原则。比如某个API只需要GET方法就不要开放PUT/DELETE。曾经因为过度开放CORS头导致CSRF攻击后来通过精细化的allowedMethods配置解决了问题。