MST

星途 面试题库

面试题:网络编程里,HTTP协议在分布式系统的跨域问题及解决策略

描述在基于HTTP协议的分布式系统网络编程开发中,跨域问题产生的原因。详细说明至少两种常见的跨域解决方案及其优缺点,以及在实际应用中的适用场景。
37.3万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

跨域问题产生的原因

浏览器的同源策略限制。同源指的是协议、域名、端口都相同。当一个请求的源(协议 + 域名 + 端口)与当前页面的源不同时,就会触发跨域问题。这是浏览器为了安全考虑,防止恶意网站通过脚本获取其他网站的数据。例如,一个在 http://example.com 页面中的脚本,不能向 http://other.com 发起 AJAX 请求,因为它们的域名不同。

常见跨域解决方案及其优缺点和适用场景

1. JSONP

  • 原理:利用 <script> 标签没有跨域限制的特性,通过动态创建 <script> 标签,请求一个带参数的跨域接口,并指定回调函数来处理返回的数据。
  • 优点:兼容性好,可在古老浏览器中使用,实现简单。
  • 缺点:仅支持 GET 请求,安全性较低,易受 XSS 攻击,因为 JSONP 是通过在页面中插入脚本标签来获取数据,恶意脚本可能会被注入。
  • 适用场景:适用于一些简单的、对安全性要求不高的数据获取场景,例如获取第三方的天气数据、新闻数据等展示类场景。

2. CORS(跨域资源共享)

  • 原理:服务端通过设置响应头来允许跨域请求。主要的响应头有 Access-Control-Allow-Origin(指定允许跨域的源,可以是具体域名或 * 代表所有源),Access-Control-Allow-Methods(指定允许的请求方法,如 GET、POST 等),Access-Control-Allow-Headers(指定允许的请求头)等。浏览器在发送请求时,如果是简单请求(如 GET、POST 且 Content-Type 为 text/plain、multipart/form-data、application/x-www-form-urlencoded 之一),会直接发送;如果是非简单请求(如 PUT、DELETE 等方法或自定义请求头),会先发送预检请求(OPTIONS),服务端返回正确的响应头后,才会发送实际请求。
  • 优点:支持各种请求方法,安全性较高,在现代浏览器中兼容性良好。
  • 缺点:需要服务端进行配置,对旧版本浏览器兼容性略差(但基本主流浏览器都支持)。
  • 适用场景:适用于各种前后端分离的项目,尤其是对安全性要求较高、需要多种请求方法的场景,如用户登录、数据提交等。