网站跨域的五种解决方式-php教程

资源魔 29 0
由于阅读器应用了同源战略,以是孕育发生跨域申请。一个网页向另外一个没有同域名/没有同协定/没有同端口的网页申请资本,这就是跨域。本篇文章提供了5种形式来处理网站跨域,感兴味的冤家能够看看。

一、甚么是逾越?

  • 一个网页向另外一个没有同域名/没有同协定/没有同端口的网页申请资本,这就是跨域。
  • 跨域缘由孕育发生:正在以后域名申请网站中,默许没有容许经过ajax申请发送其余域名。

二、为何会孕育发生跨域申请?

  • 由于阅读器应用了同源战略

三、甚么是同源战略?

  • 同源战略是Netscape提出的一个驰名的平安战略,如今一切支持JavaScript的阅读器城市应用这个战略。同源战略是阅读器最外围也最根本的平安性能,假如短少同源战略,阅读器的失常性能可能遭到影响。能够说web是构建正在同源战略的根底之上的,阅读器只是针对同源战略的一种完成。

四、为何阅读器要应用同源战略?

  • 是为了保障用户的信息平安,避免歹意网站盗取数据,假如网页之间没有餍足同源要求,将不克不及:

    • 一、同享Cookie、LocalStorage、IndexDB
    • 二、猎取DOM
    • 三、AJAX申请不克不及发送

同源战略的非相对性:

<script></script>
<img/>
<iframe/>
<link/>
<video/>
<audio/>

等带有src属性的标签能够从没有同的域加载以及执行资本。其余插件的同源战略:flash、java applet、silverlight、谷歌gears等阅读器加载的第三方插件也有各自的同源战略,只是这些同源战略没有属于阅读器原生的同源战略,假如有破绽则可能被黑客行使,从而留下XSS攻打的后患

所谓的同源指:域名、网络协定、端标语相反,三条有一条没有同就会孕育发生跨域。 例如:你用阅读器关上http://百度.com,阅读器执行JavaScript剧本时发现剧本向http://cloud.百度.com域名发申请,这时候阅读器就会报错,这就是跨域报错。

处理计划有五:

一、前端应用jsonp (没有保举应用)

  • 当咱们失常地申请一个JSON数据的时分,效劳端前往的是一串 JSON类型的数据,而咱们应用 JSONP模式来申请数据的时分效劳端前往的是一段可执行的 JavaScript代码。由于jsonp 跨域的原理就是用的静态加载 script的src ,以是咱们只能把参数经过 url的形式通报,以是jsonp的 type类型只能是get示例:
$.ajax({
    url: 'http://192.168.1.114/yii/demos/test.php', //没有同的域
    type: 'GET', // jsonp模式只有GET 是非法的
    data: {
        'action': 'aaron'
    },
    dataType: 'jsonp', // 数据类型
    jsonp: 'backfunc', // 指定回调函数名,与效劳器端接纳的分歧,并回传回来
})
  • 应用JSONP 模式来申请数据的整个流程:客户端发送一个申请,规则一个可执行的函数名(这里就是 jQuery做了封装的解决,主动帮你天生回调函数并把数据掏出来供success属性办法来挪用,而没有是通报的一个回调句柄),效劳器端承受了这个 backfunc函数名,而后把数据经过实参的方式发送进来
  • (正在jquery 源码中, jsonp的完成形式是静态增加<script>标签来挪用效劳器提供的 js剧本。jquery 会正在window工具中加载一个全局的函数,当 <script>代码拔出时函数执行,执行终了后就 <script>会被移除了。同时jquery还对非跨域的申请进行了优化,假如这个申请是正在同一个域名下那末他就会像失常的 Ajax申请同样工作。)

二、后盾Http申请转发

  • 应用HttpClinet转发进行转发(简略的例子 没有保举应用这类形式)
try {
    HttpClient client = HttpClients.createDefault();            //client工具
    HttpGet get = new HttpGet("http://localhost:8080/test");    //创立get申请
    CloseableHttpResponse response = httpClient.execute(get);   //执行get申请
    String mes = EntityUtils.toString(response.getEntity());    //将前往体的信息转换为字符串
    System.out.println(mes);
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

三、后盾设置装备摆设同源Cors (保举)

  • 正在SpringBoot2.0 上的跨域 用如下代码设置装备摆设 便可完满处理你的先后端跨域申请成绩

正在SpringBoot2.0 上的跨域 用如下代码设置装备摆设 便可完满处理你的先后端跨域申请成绩

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 完成根本的跨域申请
 * @author linhongcun
 *
 */
@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration corsConfiguration = new CorsConfiguration();
        /*能否容许申请带有验证信息*/
        corsConfiguration.setAllowCredentials(true);
        /*容许拜访的客户端域名*/
        corsConfiguration.addAllowedOrigin("*");
        /*容许效劳端拜访的客户端申请头*/
        corsConfiguration.addAllowedHeader("*");
        /*容许拜访的办法名,GET POST等*/
        corsConfiguration.addAllowedMethod("*");
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }



}

四、应用SpringCloud网关

  • 效劳网关(zuul)又称路由中心,用来对立拜访一切api接口,保护效劳。

  • Spring Cloud Zuul经过与Spring Cloud Eureka的整合,完成了对效劳实例的主动化保护,以是正在应用效劳路由设置装备摆设的时分,咱们没有需求向传统路由设置装备摆设形式那样去指定详细的效劳实例地点,只要要经过Ant模式设置装备摆设文件参数便可

五、应用nginx做转发

  • 如今有两个网站想相互拜访接口 正在http://a.a.com:81/A中想拜访 http://b.b.com:81/B 那末进行以下设置装备摆设便可
  • 而后经过拜访 www.my.com/A 外面便可拜访 www.my.com/B
server {
        listen       80;
        server_name  www.my.com;
        location /A {
            proxy_pass  http://a.a.com:81/A;
            index  index.html index.htm;
        }
        location /B {
            proxy_pass  http://b.b.com:81/B;
            index  index.html index.htm;
        }
    }
  • 假如是两个端口想相互拜访接口 正在http://b.b.com:80/Api中想拜访 http://b.b.com:81/Api 那末进行以下设置装备摆设便可
  • 应用nginx转发机制就能够实现跨域成绩
server {
        listen       80;
        server_name  b.b.com;
        location /Api {
            proxy_pass  http://b.b.com:81/Api;
            index  index.html index.htm;
        }
    }

心愿本篇文章对你有所协助。

以上就是网站跨域的五种处理形式的具体内容,更多请存眷资源魔其它相干文章!

标签: ajax php开发教程 php开发资料 php开发自学 网站跨域 http

抱歉,评论功能暂时关闭!