一个域名的组成

http:// www . abc.com : 8080 /scripts/jquery.js

 协议   子域名   主域名   端口号   请求资源地址
  • 当协议、子域名、主域名、端口号中任意一个不同时,都算作不同域。

  • 不同域之间相互请求资源,就算作"跨域"。

同源策略

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象——同源策略阻止从一个域
上加载的脚本获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当
前Web页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。这个
浏览器策略很旧,从 Netscape Navigator 2.0 版本开始就存在。

处理跨域的方式

  1. 代理

    通过同域名的服务器创建一个代理——让 Web 页面向它源自的 Web 服务器请求数据,并且让 Web 服务器像代理一样将请求转发给真正的第三方服务器。如:

    北京服务器:www.beijing.com

    上海服务器:www.shanghai.com

    北京web服务器后台:www.beijing.com/proxy-shanghaiservice.php

    来调用上海服务器的服务:www.shanghai.com/service.php

    然后将响应结果返回给前端,这样前端调用背景同域名的服务就和调用上海的服务具有相同的效果。

  2. 处理跨域方式二——JSONP(只支持GET请求)

    JSONP可用于解决主流浏览器的跨域数据访问的问题。

  3. 在www.aaa.com页面中:

      <script>
      function jsonp(json){
      alert(json["name"]);
      }
      </script>
      <script src="http;//www.bbb.com/jsonp.js"></script>

    在www.bbb.com页面中:

      jsonp({})
  4. 处理跨域的方法三——XHR2

    *HTML5提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能

    *IE10以下的版本都不支持

    *在服务器端

     header('Access-Control-Allow-Origin:*');
     header('Access-Control-Allow-Methods:POST,GET');

    例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com。

    如果直接使用ajax访问,会有以下错误:

 XMLHttpRequest cannot load http://server.runoob.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://client.runoob.com' is therefore not allowed access.

    处理跨域的集中情况:

  • 允许单个域名访问

  指定某域名(http://client.runoob.com)跨域访问,则只需在http://server.runoob.com/server.php文件头部添加如下代码:

header('Access-Control-Allow-Origin:http://client.runoob.com');
  • 允许多个域名访问

   指定多个域名(http://client1.runoob.com、http://client2.runoob.com等)跨域访问,则只需在http://server.runoob.com/server.php文件头部添加如下代码:

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';  

$allow_origin = array(
    'http://client1.runoob.com',
    'http://client2.runoob.com'
);  

if(in_array($origin, $allow_origin)){
    header('Access-Control-Allow-Origin:'.$origin);
} 
  • 允许所有域名访问

  允许所有域名访问则只需在http://server.runoob.com/server.php文件头部添加如下代码:

header('Access-Control-Allow-Origin:*'); 

Ajax如何实现跨域问题的更多相关文章

  1. js中ajax如何解决跨域请求

    js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...

  2. 06: AJAX全套 & jsonp跨域AJAX

    目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...

  3. ajax请求ashx跨域问题解决办法

    ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng  ...

  4. 原生js封装ajax,实现跨域请求

    描述: 需要ajax跨域请求,用cors跨域方案.服务端设置: header('Access-Control-Allow-Origin: http://front.ls-la.me'); header ...

  5. ajax原理和跨域解决方法

    ajax是异步的 JavaScript 和 XML.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1--启动 ...

  6. Ajax请求WebService跨域问题 [转载]

    1.背景 用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2.出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容 ...

  7. php + ajax + html 简单跨域问题

    XMLHttpRequest cannot load http://localhost:8080/abc/index.php. No 'Access-Control-Allow-Origin' hea ...

  8. Ajax如何解决跨域问题

    如果需要从不同的服务器(不同域名)上获取数据就需要使用跨域 HTTP 请求. 跨域请求在网页上非常常见.很多网页从不同服务器上载入 CSS, 图片,Js脚本等. 在现代浏览器中,为了数据的安全,所有请 ...

  9. jquery ajax GET POST 跨域请求实现

    同一段逻辑代码需要在多个网站中使用, 每个网站都新建一个ashx真是扯蛋的作法,  所以想只请求一处的ashx, 这样便于维护和修改, 那么,ajax跨域问题就来了. 废话少说, 直接上代码,  我现 ...

随机推荐

  1. html简单框架网页制作

    先把框架分结构 top顶端 <img src="title.jpg"/> left左侧 <body bgcolor="pink"> &l ...

  2. 在Unity3D 4中关联Visual Studio 2012来编写C#

    Unity3D自带的MonoDevelop编辑器无论是js还是c#代码提示都很差,很诡异的就是变量名和方法名有的时候提示有的时候不提示.不过用Visual Studio代替MonoDevelop这个问 ...

  3. Color the Ball[HDU1199]

    Color the Ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

  5. LA 3415 (二分图+最大独立集)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  6. JAVA中堆栈和内存分配

    (一).栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或 ...

  7. Google Code Jam 2009 Qualification Round Problem C. Welcome to Code Jam

    本题的 Large dataset 本人尚未解决. https://code.google.com/codejam/contest/90101/dashboard#s=p2 Problem So yo ...

  8. Css - 文本溢出处理

    http://blog.163.com/yinwei_666/blog/static/2036157320101113102733794/ overflow: hidden;-o-text-overf ...

  9. Excel操作类

    '引入Excel的COM组件 Imports System Imports System.Data Imports System.Configuration Imports System.Web Im ...

  10. Codeforeces 707B Bakery(BFS)

    B. Bakery time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...