Nintex Forms中JS调用SystemLinkServlet设置CORS头仍报跨域错误如何解决
核心问题原因
- 设置多个请求头本身是合法操作,你遇到的问题和请求头数量无关。
Access-Control-Allow-Origin是响应头,必须由被请求的SystemLinkServlet服务端在返回结果时添加,前端在请求头中配置该字段完全无效,额外添加的非标准请求头还会触发浏览器的预检OPTIONS请求,进一步触发跨域校验失败。- Postman能正常请求的原因是桌面客户端不会遵循浏览器同源策略,也不会自动发起CORS预检请求,和浏览器端JS的运行环境规则完全不同。
- 跨域扩展能生效的逻辑是拦截了目标接口的响应结果,自动给响应补充了CORS相关头字段,模拟了服务端开启跨域的效果。
无浏览器扩展的可行解决方案
方案1:配置目标服务端CORS规则
这是最直接的解决方案,在SystemLinkServlet的服务端添加以下CORS响应头即可:
Access-Control-Allow-Origin: 你的Sharepoint站点完整域名 Access-Control-Allow-Methods: POST, OPTIONS Access-Control-Allow-Headers: Content-Type
注意需要额外处理OPTIONS类型的预检请求:服务端收到OPTIONS请求时直接返回200状态码和上述响应头即可,不需要执行业务逻辑。
方案2:搭建同域名代理中转请求
如果没有权限修改SystemLinkServlet的服务端配置,可以在Sharepoint所属的同域名服务下部署一个代理接口:
- 前端JS优先请求同域名下的代理接口,不存在跨域限制
- 代理接口在服务端转发请求到SystemLinkServlet,服务端之间的请求没有CORS限制
- 代理接口拿到Servlet返回的结果后,再回传给前端即可
方案3:使用Nintex Forms内置请求能力
Nintex Forms原生提供了Web Request内置动作,不需要手写原生XMLHttpRequest。直接在动作配置面板填写目标Servlet地址、请求头、请求参数即可,平台内置的请求能力通常已经做了跨域相关适配,不会触发浏览器的CORS校验。
内容的提问来源于stack exchange,提问作者Louis Chopard
相关产品推荐
相关产品推荐

