关于第三方API跨域那些事

什么是跨域?

跨域指的是在当前页面的域名、协议或端口与请求资源的地址不一致时,浏览器会限制页面发起的跨域请求。这是出于安全性考虑而做出的限制。

例如,当一个网站 www.example.com 在页面中使用 Ajax 发起一个请求到 api.example.com,由于两个域名不同,将触发浏览器的跨域限制。

解决跨域问题的方式

JSONP

JSONP(JSON with Padding)是一种跨域解决方案,它利用了标签的 src 属性没有跨域限制的特点来实现跨域请求。JSONP 请求会创建一个 script 标签,并在其中设置 src 属性为目标 API 的地址,同时在 URL 中加入回调函数名称,服务器返回一个以该名称为函数名包裹的 JSON 数据。这样,由于 script 标签没有跨域限制,因此可以成功获取数据。

示例代码:

-------- ---------- --------- -
  ----- ------ - ---------------------------------
  ---------- - --- - ------------ - ---------
  ----------------------------------
-

-- -- ----- --
------------------------------------------------------------ ------------------

-- ---------
-------- -------------------- -
  ------------------
-

CORS

CORS(Cross-Origin Resource Sharing)是一种更加安全的跨域解决方案,它允许服务器在响应中设置一些头部信息,告诉浏览器当前请求是允许的。需要注意的是,CORS 只能用于现代浏览器。

服务器端需要在响应头中添加如下信息:

---------------------------- -

其中 * 表示任何域名都可以访问该 API,也可以指定特定的域名。

示例代码:

----- --- - --- -----------------
--------------- ---------------------------
------------------- - ----- -- ------------------ ----
---------- - ---------- -
  ------------------------------
--
-----------

代理

代理是另一种跨域解决方案,它的原理是在本地设置一个代理服务器,将所有请求发送到代理服务器上,再由代理服务器发起真正的请求并返回响应结果。这样,由于代理服务器与目标 API 的域名相同,因此不会触发跨域限制。

示例代码:

-- -------
----- ------- - -------------------
----- ------- - -------------------

----- --- - ----------

----------------- ----- ---- -- -
  ----- --- - --------------
  ---------------------------
---

-----------------

-- ----
----------------------------------------------------------------
  -------------- -- ----------------
  ---------- -- -------------------

总结

以上是跨域问题的三种解决方案,每种方案都有各自的优缺点。在实际开发中,需要根据具体情况选择最适合的方式来解决跨域问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/25180