美文网首页
跨域的几种常见方法

跨域的几种常见方法

作者: 上海_前端_求内推 | 来源:发表于2021-08-18 14:59 被阅读0次

在现在开发常规 Web 项目的时候,即使在正式上线后使用统一域名访问项目,也很难说在开发和联调过程中也使用统一域名,所以掌握跨域请求的处理还是很有必要的。

实现跨域请求的途径

跨域请求的处理方法除了 CORS 外,还有 代理服务器JSONP

代理服务器

一说到使用服务器的方式,我们可以马上想到一个流行的反向代理服务器 Nginx,的确,我们可以使用 Nginx 的 proxy_pass 指令实现代理的目的,但这种方法往往很不直观,且一般也需要前端同学在本地搭建相关环境才可以运作,可以说是一个不怎么样的选择。

除了 Nginx 外,前端的同学可能会说现在很多流行的框架都集成有这样的功能,如 Vue.js 的 devServer,前端同学可以在项目中编写熟悉的 Javascript 代码以实现请求的代理,最终实现跨域请求,方便联调,但也局限于开发时使用。

JSONP

JSONP 是利用了 src 引用静态资源时不受跨域限制的机制,前端会先定义一个回调函数用来处理请求成功后的逻辑,并在请求服务端时告知服务端这个回调函数的名字,而服务端只需要把需要返回的数据按照 Javascript 的语法,放进回调函数中即可。 大概像这样子:

的确,JSONP 可以成功获取到数据,且回调函数也会被正确执行,但在使用 JSONP 之前,它的缺点你需要先了解:

  • 只能用 HTTP Get 请求;
  • 错误处理不完善,我们很难对请求时发生的错误进行处理;
  • 安全问题等其他问题。

说实话,现在在开发项目时已经很少使用 JSONP 了,这里只是给同学们了解了解。

CORS

CORS 机制,允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全。

这里以 Nginx 为例,看看要怎样才能做到跨域访问控制。 我们来看看如何配置吧:

http { # 省略其他... server { listen 80; server_name api.yoursite.com;charset utf-8;location / {include /usr/local/nginx/conf/cors;// 省略其他...}}}

这样,我们 http://api.yoursite.com/ 下的 API 就支持跨域请求了(不考虑程序代码有限制的情况)。

重点是 include /usr/local/nginx/conf/cors ,下面来看看 cors 文件里面的内容吧:

image.png

其核心的部分,是加入了 Access-Control-Allow-Origin HTTP 头,而其他部分的内容,则是更细粒度的控制,如不同的请求方法也可以设置不同的 HTTP 头达到控制的目的。 搭配 Nginx 的 location 指令,我们则可以控制某些路径下才开启 CORS,以达到更细粒度的控制。

大家可以在 https://enable-cors.org/server_nginx.html 获得 cors 文件的内容。这个文件内容只是一个范本,并不是唯一的写法,大家在实际使用时按照需求自行修改即可。

如果你想更深入了解 CORS 机制,可以访问 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

不用 Nginx 行不行?

理解了 CORS 机制的原理的话,这种问题不在话下。

这个网址提供了不同服务器、Web 框架、编程语言的实现方式,https://enable-cors.org/server.html

忍不住吐槽,里面偏偏没有 Django 的实现方式,Django 的话,可以使用 django-cors-headers,在使用 Django 开发后端时,前端也能愉快的发起跨域请求了。

选择 CORS

从技术的革新角度也好,从使用的便捷度也好,CORS 是一个更好的跨域请求的选择。只需要(一般是)后端人员配置好,前端可以不需要做任何额外的改变,就可以调用后端 API 了。这种方法,无论是开发时或是正式上线后,都可以使用,无需考虑过大的差异性问题。

还没有用过 CORS 的同学,赶紧尝试一波吧。

相关文章

  • 常见的几种跨域方法

    1.CORS方式实现跨域。 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于I...

  • #hello,JS:15 同源策略 & 跨域(JSONP)

    跨域有几种常见的方式?你有没有跨域使用的经验? 方式: 使用jsonp实现跨域?使用cors实现跨域?浏览器另类的...

  • 跨域的解决方式

    跨域有很多种方式,下面就简单说说跨域最常见的几种解决方式1、JSONPJSONP是服务器与客户端跨源通信的常用方法...

  • 跨域问题详解分析

    参考文档 CORS详解 跨域资源共享 CORS 详解 js中几种实用的跨域方法原理详解 跨域的那些事儿 跨域与跨域...

  • web跨域解决方案

    围绕以下几点介绍: 什么是跨域? 常用的几种跨域处理方法? crossdomain.xml解决跨域问题 什么是跨域...

  • 跨域的几种常见方法

    在现在开发常规 Web 项目的时候,即使在正式上线后使用统一域名访问项目,也很难说在开发和联调过程中也使用统一域名...

  • 【内网学习笔记】30、跨域安全(完结)

    0、前言 常见的跨域攻击方法有以下几种: i、利用常规的渗透方法,比如 Web 漏洞 ii、利用已知散列值进行哈希...

  • 跨域

    跨域的几种方法 通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以...

  • 关于跨域

    跨域的几种方法及优缺点 1. JSONP跨域 优点:它不像XMLHttpRequest对象实现的Ajax请求那样受...

  • iframe

    一、iframe跨域的几种常用方法 1、postmessage window.postMessage方法可以安全地...

网友评论

      本文标题:跨域的几种常见方法

      本文链接:https://www.haomeiwen.com/subject/qopgbltx.html