
1. CORS(Cross-Origin Resource Sharing)
CORS是一种支持跨域访问的安全技术,其核心思想是在服务器端设置一系列允许或拒绝的规则,来控制不同源的客户端是否可以访问本服务器的资源。
原理:
- 预检请求(Preflight Request):当执行一个跨域的AJAX请求时,浏览器会先发送一个OPTIONS请求到服务器,询问服务器是否允许进行该类型的跨域操作。
- 响应头:服务器在接收到预检请求后,通过设置Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等响应头来决定是否允许该跨域请求。
优点:
- 安全可靠,可以有效防止CSRF(跨站请求伪造)等安全威胁。
- 易于管理和控制,服务器端可以精确控制哪些源可以访问资源。
缺点:
- 需要服务器端支持,且配置较为复杂。
- 预检请求会增加网络延迟和开销。
2. JSONP(JSON with Padding)
JSONP是一种非官方的跨域数据交换协议,它允许在不同域的服务器之间传递数据。它利用<script>
标签没有跨域限制的特点来实现数据的传输。
原理:
- 客户端通过在URL中添加一个回调函数作为参数,请求服务器返回一个包含该回调函数调用的JSON数据。
- 服务器收到请求后,将数据以回调函数的形式包裹并返回给客户端。
- 客户端接收到数据后,通过-->