SSE 跨域资源共享(CORS)问题解决:一篇基础教程

阅读时长 4 分钟读完

前言

随着前端应用的不断发展,跨域资源共享(CORS)已经成为越来越多前端工程师必须面对的问题。随着互联网技术的飞速发展,前端跨域资源访问问题愈发明显,也成为前端开发工作一大难点。以 JavaScript 发起的 HTTP 请求为例,浏览器通常会限制请求的资源必须来自同源(即协议、域名和端口都相同)。

跨域资源共享(CORS)

CORS(Cross-Origin Resource Sharing)是一种基于 HTTP 头的机制,该机制允许服务器在响应中设置 HTTP 头 Access-Control-Allow-Origin,从而使一个资源可以被跨域共享。CORS 主要用于 AJAX 异步请求和 Web Fonts 请求,以允许跨域访问服务器资源。

CORS 机制,简而言之,就是浏览器将发起跨域请求时,会在 HTTP 请求头中添加附加信息,服务器在接收到请求后进行判断,根据附加信息判断是否允许该跨域请求。

解决方法

下面我们来介绍几种常见的跨域解决方法。

JSONP(JSON with Padding)

JSONP 是一种跨域访问方式,原理是在前端通过动态插入一个 <script> 标签,并设置该标签的 src 属性等于需要请求的接口 URL,然后服务端收到请求后,以 JSON 格式将数据放入回调函数参数中返回给客户端,并在客户端定义该函数,并传入回调函数名称(即回调函数名),从而达到跨域请求。

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

然后在服务端实现根据回调函数名返回处理后的数据,并返回 text/javascript 的响应头:

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

CORS 资源共享

CORS 跨域资源共享,主要用于请求数据和 API 接口。客户端通过浏览器 HTTP 请求头中添加 Origin 参数告诉服务器请求的来源,服务器在响应头中添加 Access-Control-Allow-Origin 指定来自哪些来源的请求可以访问该资源。

然后在服务器返回请求时响应头添加 Access-Control-Allow-Origin

代理

代理也是一种解决跨域问题的方法,顾名思义,就是通过一个中间代理层来转发请求。这种方法的核心思想是:后端使用 AJAX 来获取数据,前端通过 AJAX 请求来获取数据并渲染模板。这样就可以避免跨域。

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

在 webpack 中使用:

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

结语

本文从介绍跨域资源共享的概念开始,深入浅出地分析了跨域问题的解决方法,针对纯前端解决方案提供了 JSONP 和 CORS 的实现方法以及如何使用代理来解决跨域问题。希望本文能够对您有所帮助和启发。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6781fd78935627c900f293c5

纠错
反馈