MST

星途 面试题库

面试题:Objective-C中跨域请求处理的基本原理

在Objective-C进行高性能网络编程时,简述跨域请求产生的原因以及通常处理跨域请求的几种基本原理和方式。
27.8万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

跨域请求产生的原因

浏览器出于安全考虑,有同源策略。同源指的是协议、域名、端口都相同。当一个请求的 URL 的协议、域名、端口三者之一与当前页面的 URL 不同时,就会产生跨域请求。例如,当前页面是 http://example.com:8080,若请求 http://other.com:8080 或者 http://example.com:8081 等都属于跨域请求。

处理跨域请求的基本原理和方式

  1. JSONP(JSON with Padding)
    • 原理:利用 <script> 标签没有跨域限制的特性来实现跨域数据传输。服务器返回一段可执行的 JavaScript 代码,其中包含了需要传递的数据,通过在页面动态创建 <script> 标签,将其 src 属性指向服务器脚本地址,从而获取数据。
    • 方式:客户端定义一个回调函数,将回调函数名作为参数传递给服务器。服务器将数据以回调函数调用的形式返回,例如 callback({data: '...'})。客户端在接收到响应后,会自动执行该回调函数,从而获取数据。
  2. CORS(Cross - Origin Resource Sharing,跨域资源共享)
    • 原理:服务端设置响应头,允许来自不同源的请求。浏览器在发现跨域请求时,会先查看服务端返回的响应头中是否包含允许跨域的信息,如果包含则允许请求,否则阻止请求。
    • 方式:在服务器端设置 Access - Control - Allow - Origin 等响应头。例如,设置 Access - Control - Allow - Origin: * 表示允许所有源访问;也可以设置为具体的源,如 Access - Control - Allow - Origin: http://example.com。对于复杂请求(如非简单请求,像 PUTDELETE 等方法或者包含自定义头部的请求),浏览器会先发送一个预检请求(OPTIONS),服务器需要正确响应预检请求,返回允许的请求方法、头部等信息,之后正式的跨域请求才能成功。
  3. 代理服务器
    • 原理:在客户端和服务器之间搭建一个代理服务器,客户端向代理服务器发送请求,代理服务器再向目标服务器发送请求并接收响应,最后将响应返回给客户端。由于代理服务器和客户端属于同源,所以不存在跨域问题。
    • 方式:可以使用 Nginx 等服务器作为代理服务器,通过配置反向代理规则,将客户端的跨域请求转发到目标服务器,并将响应返回给客户端。例如在 Nginx 配置文件中设置 proxy_pass 指令来指定目标服务器地址。