在前端开发中,跨域是经常遇到的问题,也是面试最喜欢问的问题,究其根本原因,是浏览器的同源策略所致,是浏览器为了避免不同域名不能共享cookie以及locationstorage等等,发起请求的时候无法携带不同域名的cookie,不能请求不同域名的json。

但是事无绝对,浏览器是运许srcipt标签跨域访问的,也就是说我可以在我的页面引用不同域名的script,另外h5提供了一些带有一定安全措施的跨域办法。

跨域一般有以下集中方法:

jsonp/script:jsonp和script其实都是利用script无跨域限制来实现的,jsonp是使用了一下eval函数把字符串变成对象(具体的内部机制可以在网上查阅)

postmessage方法:chrome插件中的background.js跟原页面的通讯也是这样的实现,也就是我在另外的页面上有接受send过来字符串对应的处理方法
  中间层:利用服务端做中间层转化一次

在jq的aajx方法中有这样一个参数平时用的比较少,发现设置后可以跨域,在页面加入这样的配置即可

  $.ajaxSetup({
crossDomain:true,
xhrFields: {
withCredentials: true
}
});

  这个方法的细节还有待研究,先列出来吧,crossDomain好理解,另一个还没仔细研究,先记下来,以后补充

这是jquery 的写法,如果使用原生的javascript,可以参考如下写法:

  //这里需要处理针对不同浏览器的xmlhttprequest,ie的是activeXObject
var xhr = new XMLHttpRequest();
xhr.open("GET", "test"); xhr.setRequestHeader('Content-Type','text/html');
xhr.setRequestHeader('Access-Control-Allow-Origin','*/*');//这里可以是设置请求允许的域名白名单的,可以直接写域名,也可以写*表示全部
xhr.withCredentials=true;//这个是设置允许跨域的
xhr.onreadystatechange = function() {
//todo
}
xhr.send();

 前端做了这些之后,还需要服务端设置接受http头信息,当然也可以设置指定域名的:

  
Access-Control-Allow-Origin: *

Access-Control-Allow-Origin: */*

Access-Control-Allow-Origin: http://www.test.com

  

参考资料如下:

  

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

关于ajax的跨域的更多相关文章

  1. AJAX POST&跨域 解决方案 - CORS

    一晃又到新年了,于是开始着手好好整理下自己的文档,顺便把一些自认为有意义的放在博客上,记录成点的点滴.          跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是 ...

  2. 解决Ajax不能跨域的方法

    1.  Ajax不能跨域请求的原因 同源策略(Same Origin Policy),是一种约定,该约定阻止当前脚本获取或者操作另一个域下的内容.所有支持Javascript的浏览器都支持同源策略,也 ...

  3. AJAX POST&跨域 解决方案 - CORS(转载)

    跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免 ...

  4. jQuery的ajax jsonp跨域请求

    了解:ajax.json.jsonp.“跨域”的关系 要弄清楚以上ajax.json.jsonp概念的关系,我觉得弄清楚ajax是“干什么的”,“怎么实现的”,“有什么问题”,“如果解决存在的问题”等 ...

  5. javascript ajax 脚本跨域调用全解析

    javascript ajax 脚本跨域调用全解析 今天终于有点时间研究了一下javsscript ajax 脚本跨域调用的问题,先在网上随便搜了一下找到一些解决的办法,但是都比较复杂.由是转到jqu ...

  6. JavaScript(10)——Ajax以及跨域处理

    Ajax以及跨域处理 哈哈哈,终于写到最后一章了.不过也还没有结束,说,不要为了学习而学习,恩.我是为了好好学习而学习呀.哈哈哈.正在尝试爱上代码,虽然有一丢丢的难,不过,我相信我会的! [Ajax] ...

  7. ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递

    前言 最近公司项目进行架构调整,由原来的三层架构改进升级到微服务架构(准确的说是服务化,还没完全做到微的程度,颗粒度没那么细),遵循RESTFull规范,使前后端完全分离,实现大前端思想.由于是初次尝 ...

  8. 原生JS实现Ajax及Ajax的跨域请求

      前  言          如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. ...

  9. ajax实现跨域访问

    ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...

  10. Ajax之跨域访问与JSONP

    前言 同源策略的限制,使得ajax无法发出跨域请求.在许多情况下,我们需要让ajax支持跨域.以下是其中一种解决方案(JSONP).JSONP解决了跨域数据访问的问题. 在html中,具有src属性的 ...

随机推荐

  1. TeamCity Build 步骤的执行策略

    TeamCity 会根据前一个 build 步骤的返回状态和当前的 build 状态来综合判断是否运行下一个 build 步骤.1 失败状态 当满足下面条件时 build 步骤的状态被确定为失败: b ...

  2. 什么是HTML DOM对象

    HTML DOM 对象 HTML DOM Document 对象 Document 对象 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 ...

  3. 解决 Invalid character found in method name. HTTP method names must be tokens 异常信息

    一个线上环境出现异常,不是spring boot. 解决方法: server.xml中加上maxHttpHeaderSize="8192" springBoot 1.x则是在app ...

  4. linux系统ansible一键完成三大服务器基本配置

    准备: 五台服务器:一台管理服务器m01:172.16.1.61.两台应用服务器web01:172.16.1.7.web02:172.16.1.8.一台存储服务器nfs:172.16.1.31.一台备 ...

  5. JS(JavaScript)的进一步了解5(更新中···)

    1.针对表单的 form input select textarea type=”radio/checkbox/password/button/text/submit/reset/” 表单的事件 on ...

  6. 【新特性】JDK1.8

    一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的 ...

  7. 【新特性】JDK1.7

    一.switch中可以使用字串 String s = "test";switch (s) { case "test" :   System.out.printl ...

  8. [译]RabbitMQ教程C#版 - 路由

    先决条件 本教程假定 RabbitMQ 已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难, ...

  9. redis搭建主从复用-读写分离

    1:安装redis5.0.3 2:解压到/usr/local/redis 3:在/opt/redis/下创建三个文件夹 data,存放数据的目录 log,存放日志的目录 conf,存放配置的目录 co ...

  10. 使用教育邮箱激活JetBrains全家桶

    如果你还有在校时的邮箱,比如your_name@xxx.edu或者your_name@xxx.edu.cn的邮箱,那么你可以免费激活JetBrains全家桶. JetBrains Toolbox 专业 ...