跨域指的是浏览器在请求不同域名下的资源时,会因为同源策略的限制而导致请求失败,为了解决跨域问题,以下是几种常用的跨域解决方案。
JSONP:
JSONP(JSON with Padding) 是利用 标签的 src 属性不受同源策略限制的特点实现的一种跨域数据请求方法。通过在请求 URL 中传递一个回调函数名参数,服务端将数据包装成该函数的调用返回,进而绕过了同源策略的限制。当然,JSONP 只能用于 GET 请求,并且只支持文本类型的数据。
CORS:
CORS(Cross-Origin Resource Sharing)是W3C标准,是一种更为安全和灵活的跨域解决方案。它通过在服务端设置响应头 Access-Control-Allow-Origin 来允许指定域名的请求进行跨域访问。可以允许所有域名的请求进行跨域,也可以设置指定域名。CORS 支持所有的 HTTP 请求,并且支持 cookie、HTTP 认证等方法。
代理服务器:
代理服务器是一种常用的跨域解决方案。因为代理服务器本身与目标服务器同源,所以它可以在有网络访问权限的情况下,实现对目标服务器资源的访问和请求。前端将请求发送给代理服务器,再由代理服务器将请求发送给目标服务器,最后将响应结果通过前端的方式展示。
postMessage:
postMessage 是 HTML5 提供的一种跨文档通信机制,可以在不同的浏览器窗口、iframe 以及不同的文档之间传递消息。通过 postMessage,可以实现不同域名下的页面之间的通信。它需要在不同窗口下的 JavaScript 脚本之间进行相互通讯,来实现数据传递。
WebSocket:
WebSocket 是一种持久化的协议,可以在同源策略的限制下实现全双工(即双向数据传输)通信。WebSocket 可以运行在浏览器和服务器之间,是一种更为高效和灵活的传输方式,常用于实现实时通讯和实时数据更新。不同域名下的页面之间可以通过 WebSocket 进行通信。
有了这些跨域解决方案,开发者不用再限制在同一域名下的网页页面之间了,可以更加灵活地打破独立的 Web 应用程序之间的壁垒,提高应用的可用性和互操作性。

打开网易新闻 查看精彩图片