跨域解决方式

1. 跨域

废话不多说,就是为了解决同源策略的苛刻,直接说解决方式jsop和cors两种方式

jsop是大家用的比较多也是最常见的一种,简单说下原理:

利用script标签的方式向不同的域下发送请求。首先动态的创建script标签,其src属性是没有跨域限制的,将请求的路径赋给src,type="text/javascript",这样就会一段执行之后就会将结果返回一段js代码,那么就在客户端注册一个callback方法(如:jsonCallback)。那么服务器端在返回这段内容的时候就会包裹上jsonCallback(....),客户端就会自动执行这个方法。正式由于这种方式是利用的script标签,因此也就注定了他的局限性,只能解决get请求。

同样的还可利用<image src>标签来实现

那么对于现在比较流行的restfull风格的POST,PUT,DELETE等方式就束手无策了吗,不是的,还有一种方式是cors策略

这种方式主要是服务器端进行操作,Access-Control-Allow-Origin: | * // 授权的源控制 Access-Control-Max-Age: // 授权的时间 Access-Control-Allow-Credentials: true | false // 控制是否开启与Ajax的Cookie提交方式 Access-Control-Allow-Methods: [, ]* // 允许请求的HTTP Method Access-Control-Allow-Headers: [, ]* // 控制哪些header能发送真正的请求 但是通常情况下CORS这种方式是不会传递cookie的,一般浏览器强制将cookie添加到header的做法,也会被浏览器拒绝并报错,上面提到的Access-Control-Allow-Credentials来控制是否允许cookie提交。因此需要在angular中进行设置withCredentials:true,或者ajax中xhrFiled:{withCredentials:true},crossDomain:true.

http://www.nowamagic.net/librarys/veda/detail/224/

http://m.baidu.com/from=1000953b/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401320_1002%2Cta%40iphone_2_4.4_2_6.6/baiduid=22401C7F9575A7067885D4D601B5BE21/w=0_10_angular+js+withCredentials/t=iphone/l=3/tc?ref=www_iphone&lid=10531186519244395428&order=5&vit=osres&tj=www_normal_5_0_10_title&m=8&srd=1&cltj=cloud_title&dict=20&nt=wnor&title=AngularJS%E9%80%9A%E8%BF%87CORS%E5%AE%9E%E7%8E%B0%E8%B7%A8%E5%9F%9F%E6%96%B9%E6%A1%88_Linux%E7%BC%96%E7%A8%8B_Linux%E5%85%AC%E7%A4%BE-...&sec=13199&di=c74effd91bf44476&bdenc=1&tch=124.47.45.812.0.0&tch=124.443.75.830.1.345&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_yJR0CumpEm9xP4kHREsRFv7Lmq3ZpPPdj0PtQIFuGGdWWUm8BN0t0IwdzW&eqid=92264a57b6f1d00010000001576b2157&wd=&clk_info=%7B%22srcid%22%3A%22www_normal%22%2C%22tplname%22%3A%22www_normal%22%2C%22t%22%3A1466638814270%2C%22xpath%22%3A%22div-a-h3%22%7D 这是两篇对我帮助比较大的文章。 哈哈!截至到现在关于跨域的解决方式算是完成了。但还是遇到了其他的问题

2. Cookie

原因是这样的,我在进行ajax请求的时候,服务器端通过response.header set-cookie通知浏览器生成cookie文件,涉及到登陆我需要将cookie信息传递过去,可是我就在我自己的域下面怎么也找不到相应的cookie。原来cookie默认是设置在请求的域底下的,所以他是在我的ajax中的请求域名底下存在。搜戴斯乃,终于思路撸通了。

时间: 2025-01-07 21:37:42

跨域解决方式的相关文章

JS跨域解决方式 window.name

window.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制.数据只能是字符串.设置和获取 cookie 语法的复杂等等)而发明的(详细见原文:<Session variables without cookies>),后来Kris Zyp 在此方法的基础上强化了 window.name 传输 ,并引入到了 Dojo(dojox.io.windowName),用来解决跨域数据传输问题. window.name 的美妙

前端调试-跨域解决方式

chrome使用插件:Allow-Control-Allow-Origin chrome修改配置: windows: 在电脑上新建一个目录,例如:C:\MyChromeDevUserData(可以自定义,但是记住路径) 右键Chrome -- 属性,目标输入 --args --disable-web-security --user-data-dir="C:\MyChromeDevUserData" 重新打开 Chrome mac: open -a "Google Chrome

JavaScript跨域解决方法大全

跨域的定义:JavaScript出于安全性考虑,同源策略机制对跨域访问做了限制.域仅仅是通过"URL的首部"字符串进行识别,"URL的首部"指window.location.protocol +window.location.host,也可以理解为"Domains, protocols and ports must match".实际上,同源策略就是浏览器的一种保护机制,只要请求双方的URL协议.域名(主机).端口有任何一个不同,都被当作是跨域.

spring mvc 图片上传,图片压缩、跨域解决、 按天生成目录 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成目录 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE be

spring mvc 图片上传,图片压缩、跨域解决、 按天生成文件夹 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成文件夹 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE b

[跨域]跨域解决方法之Ngnix反向代理

跨域原理:http://www.cnblogs.com/Alear/p/8758331.html 介绍Ngnix之前,我么先来介绍下代理是什么~ 代理相当于中间人,中介的概念 代理分为正向代理和反向代理.(PS:本文介绍的解决跨域方法用的是反向代理) 正向代理:现在客户端发送一个请求给服务端,可是该客户端没有访问权限,于是只能交给一个代理服务器来转交该客户端的请求给服务端响应. 客户端知道请求资源地址,也能感知代理服务器的存在. 反向代理:客户端发送一个请求,代理服务器收到这个请求,判断到这个请

跨域解决方法

跨域解决方法: 1.利用后端 ①设置头信息 ②后端代理 2.flash代理 3.jsonp 在js中找到一个代理 ①能够访问网络资源,并且不会有跨域问题 ②获取到资源数据可以给js使用 var oScript = document.createElement('script'); oScript.src = 'data.php'; document.body.appendChild(oScript); IE解决$.ajax() 跨域 $.support.cors = true;

js 利用iframe和location.hash跨域解决办法,java图片上传回调JS函数跨域

奶奶的:折腾了我二天,终于解决了!网上有很多例子. 但跟我的都不太一样,费话不多说了,上图   上代码: IE ,firefix,chrome 测试通过 js :这个主页面,部分代码, function submitUpload(id){ $("#imgSrc" + id +"").attr("alt", "图片上传中--"); var imgID = id; if(id>0){ imgID = 1; } var for

ajax 跨域解决方法

最近在开发过程中,使用ajax去异步调取图片.在开发中这个功能没什么问题,可以后来提测,重新部署之后就有问题了,这就是ajax的跨域问题. ajax本身是不支持跨域的,这是由于javascript的同源策略所导致.但是我们可以通过其他方法来解决ajax的跨域问题. 1  由于我们是利用了jquery来写的ajax,我们一开始是准备 利用jsonp来解决的,客户端类似下面写法 $.ajax({ type : "get", async:false, url : "http://w