处理 Headless CMS 的跨域问题的技巧

· 约 5 分钟读完

Headless CMS 是一种将内容管理系统抽象为通用 API,将前端和后端的 CMS 逻辑剥离,拥有更大的灵活性和自由度。但是他也带来了一个问题,即跨域问题,为了处理 Headless CMS 的跨域问题,我们有以下几个技巧。

使用代理

代理是最常见的处理跨域的方法,就是本地的请求地址与服务器不一致,可以通过代理在中间进行转发,绕过浏览器的跨域限制。通常我们把请求发送到本地代理服务器,然后由本地代理服务器把请求转发到真正的 CMS 服务器上。这样我们可以在本地跑一个代理服务器,来解决跨域问题,比如使用 http-proxy-middleware。

使用 CORS

CORS 是一种跨域资源分享的机制,通过在服务器端设置 HTTP 头让浏览器与服务器进行沟通来解决跨域问题。使用 CORS 要注意几个问题:

  • 服务端需要设置 Access-Control-Allow-Origin、Access-Control-Allow-Methods 以及 Access-Control-Allow-Headers。

  • 在请求数据的时候需要在 header 中添加 Origin 字段(也可不添加),否则服务器无法识别。

  • 在响应数据的时候需要在 header 中添加一下字段:

    • Access-Control-Allow-Origin:添加允许访问的域名地址

    • Access-Control-Allow-Credentials:如果带上 cookie,需要设置为 true。

使用 JSONP

JSONP 则适用于只需要从远端服务端获取数据,不需要进行修改或提交的前端请求。JSONP 原理简单,是通过动态添加 script 标签来获取远程数据(因为 script 标签是没有跨域限制的)。服务端返回的数据以 callback 函数的方式载入,就可以在远端的页面中调用这个函数了。使用 JSONP 时,需要注意点:

  • JSONP 数组的序列化不能出错,否则页面就挂了。

  • 无法把 POST 请求转化为 GET 请求。

使用消息机制

Window.postMessage() 方法可以使我们在不同的 window/tab 之间进行消息传递。这种方法的实现原理是在头文件中添加两个特殊消息字段,然后通过 targetWindow.postMessage(message, targetOrigin); 将消息传递给 targetWindow。接收消息的事件为服务器端实现,为 onmessage。

但是,这种方法只适用于 HTML5 支持的浏览器,且传递的数据有大小限制。

综上,以上四种技巧都可以在解决 Headless CMS 的跨域问题上提供帮助。使用不同的技巧,并结合具体业务需求,可以在合适的场景中得到很好的使用效果,提升开发的效率,增强编码技巧。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d7f896a941bf7134e3d076