解决跨域三种方法

  什么是跨域,为什么要解决跨域。根据浏览器的同源策略。当浏览器不能响应执行网站的脚本时候,首先想到第一个问题点是否存在跨域问题。就是所谓同源策略,何为同源就我们经常上网是通过网址访问网站。而网址就由 www(协议),子域名 、主域名,加端口号组成。当访问的地址的这几个部分不同就会产生跨域。通常由于端口的不同造成跨域问题。浏览器同源策略根据安全考虑。解决跨域问题有三种方法。包括有jsonp(只局限于get请求方式)、nginx配置代理模式、服务器端跨域共享CORS。
  一、jsonp解决跨域是javascript代理模式,它是实现原理是通过动态在Html页面中插入
    注意若在设置header时候带有原始Orign字段,说明是一种跨域请求。
对解决复杂请求的跨域:
 方法步骤复杂这里大概步骤不具体分析服务器端处理机制

服务器对于跨域请求的处理流程如下:

首先查看http头部有无origin字段;
如果没有,或者不允许,当成普通请求;
如果有且是允许的,再看是否是preflight(method=OPTIONS);
如果不是preflight(简单请求),返回Allow-Origin,Allow-Credential等字段,并返回正常内容;
如果是preflight(非简单请求),返回Allow-Headers,Allow-Methods等;
配置CORS规则
apache上配置CORS规则
Apache需要使用mod_headers模块来激活HTTP头设置,默认是激活的,只需要修改Apache配置文件中的/etc/apache2/sites-available/000-default.conf
1 开启模块
sudo a2enmod headers
2 编辑配置文件
sudo vi /etc/apache2/sites-available/000-default.conf
3 在虚拟主机Directory设置下添加
Header set Access-Control-Allow-Origin *

总结:
除了上面提到三种跨域请求外,还有其他许多解决跨域方法
比如window.name + iframe 、location.hash + iframe等几种不同的方式,上面三种比较通用方式。