美文网首页
跨域问题的解决方案

跨域问题的解决方案

作者: 一起来看雷阵雨 | 来源:发表于2018-09-22 17:57 被阅读0次

只要经常开发前端的程序员对跨域肯定不陌生,尤其是在如今前后台分离开发的模式,前台和后台并不在一个服务器上,所以跨域成了不可避免的问题。
以前因为项目开发模式还是老旧的jsp,服务都在一台服务器上,所以一直没过多了解。这次开发新项目时想去尝试学习Vue,采用了前后端完全分离的开发模式,在本地测试的时候因为端口号导致ajax请求失败。既然遇到了,这次就一定要把跨域彻底搞清楚,并找到解决方案。

在解决之前,先来了解一下跨域是什么,官方说法:跨域;
看过之后应该对跨域和解决方案CORS是什么有个简单了解了吧。

跨域问实际上是为了保证网站内容的安全,对于非同源的访问做了限制。具体的细节我就不多说了,直接上解决方案:

1.简单请求:

   请求方法限制:HEAD,GET,POST
   请求头限制:
      不允许有自定义请求头选项,只能包含以下几个请求头:
       * Accept
       * Accept-Language
       * Content-Language
       * Content-Type
       * DPR
       * Downlink
       * Save-Data
       * Viewport-Width
       * Width
      其中Content-Type只能是:application/x-www-form-urlencoded、multipart/form-data、text/plain;

2.服务器端允许跨域

简单请求是协议天然允许的,只是有一些限制,但是这些简单请求显然无法满足我们的需求,尤其是Ajax的跨域,此时就需要让服务器允许跨域请求的访问。
原理就不细说了,CORS的文档中有详细介绍,简单点就是:
  一个跨域请求的在发送之前,浏览器会先向服务器发送一条请求(官方叫做:Preflighted requests),其中头信息包含:

  • Origin: http://foo.example
  • Access-Control-Request-Method: POST
  • Access-Control-Request-Headers: X-PINGOTHER, Content-Type
    用来告知服务器跨域请求的信息,然后服务器给予回应告诉浏览器自己所支持的跨域请求:
  • Access-Control-Allow-Origin: http://foo.example
  • Access-Control-Allow-Methods: POST, GET
  • Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
  • Access-Control-Max-Age: 86400
    从名字便可以看出来,分别是支持的源服务器,方法,自定义头,和Preflighted requests的缓存时间。

这样一看解决跨就很简单了,只要我们在response中添加这几条头信息就可以啦。接下来就试试,测试用例是本地服务,前端端口和后台端口不一样,后台是Spring Boot,马上动手试试:

手动设置
image.png

手动给response添加这几个Header,看看请求信息:


image.png

说明请求成功了,从response headers中也能看到咱们的添加的header信息。

过滤器

一个一个设置太过麻烦,但这是最安全的,可以精准到方法级别,如果想要全部支持跨域,自然想到用过滤器来控制,统一添加header便可;

Spring mvc的@CrossOrigin注解

过滤器好用,但没法精确配置,手动设置又太麻烦,这时候框架的威力就显示出来了,只要在方法加上这个注解,配置@RequestMapping就可以支持跨域了:


image.png

3其他方法

除了CORS,还有JSONP和本身就支持跨域的标签,如img,iframe等,这些需要的自己去了解一下。

文章参考了sf的一篇优秀文章,写的更加优秀和详细哦不要再问我跨域的问题了

相关文章

  • 跨域问题,解决方案

    跨域问题,解决方案 - Nginx反向代理跨域问题,解决方案 - CORS方案此为原作者的链接:跨域问题,解决之道

  • Web前后端跨域问题处理

    跨域问题有前台跨域(iframe间)和后台跨域。 前台跨域的解决方案可以采用跨域文档通讯(Cross domain...

  • 开发环境跨域和生产环境跨域

    开发环境跨域 前后端分离,IP地址不同,请求数据必然导致跨域问题;解决方案:proxy设置 生产环境跨域 解决方案...

  • Js请求跨域问题

    一、请求跨域问题概述 跨域:指的是协议名、端口或者域名不一致的情况都是跨域。 二、跨域问题的解决方案 1、同域代理...

  • 2、JS-Web-API知识点

    跨域问题:跨域的解决方案?教程: https://www.imooc.com/video/6238https://...

  • JWT简记

    JSON Web Token(JWT)是目前最流行的跨域认证解决方案。 跨域认证问题及传统解决方案 传统认证流程 ...

  • Spring Boot使用CORS解决跨域问题

    一、跨域问题描述 Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等。CORS 与 ...

  • 跨域

    博客 说说跨域那些事儿 不要再问我跨域的问题了 前端常见跨域解决方案(全) 同源策略 JSONP(填充式JSON)...

  • uni-app之浏览器跨域问题解决方案

    Chrome调试跨域问题解决方案 1.跨域CORS(Cross-Origin Resource Sharing) ...

  • 面试官:那有没遇到跨域问题,如何解决跨域?

    面试官:有没遇到跨域问题,如何解决跨域? 一、同源策略 谈到跨域问题,要先谈浏览器的同源策略。 二、解决方案 1、...

网友评论

      本文标题:跨域问题的解决方案

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