文档章节

Access-Control-Allow-Origin与Ajax跨域

深圳大道
 深圳大道
发布于 2016/12/29 15:23
字数 489
阅读 0
收藏 0

问题

在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题。另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,才能让前者成功拿到数据。

这句话对吗?如果对,那么流程是什么样的?

跨域

怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域。

参考:

当跨域访问时,浏览器会发请求吗

这是真正困扰我们的问题,因为我们不清楚浏览器会怎么做。它会不会检查到你要请求的地址不是同一个域的,直接就禁止了呢?

我在jsbin上 做了一个试验 ,使用Chrome打开。当点击“Run with Js”时,控制台上会打出:

XMLHttpRequest cannot load http://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://run.jsbin.io' is therefore not allowed access. 

但开发者工具的”Network”栏并没有任何记录。它到底发请求了没?

我又使用 python -m SimpleHTTPServer 在本地创建了一个小服务器,然后把地址改成它,结果发现在python这边的确打印出请求来了,可见浏览器的确发出了请求。

Access-Control-Allow-Origin

现在该 Access-Control-Allow-Origin 出场了。只有当目标页面的response中,包含了 Access-Control-Allow-Origin 这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理。如:

Access-Control-Allow-Origin: http://run.jsbin.io

如果它的值设为 * ,则表示谁都可以用:

Access-Control-Allow-Origin: *

没错,在产品环境中,没人会用 *

你可以阅读下面这篇文章了解更多,并可找到其中的”Run Sample”链接,实际体验一下:

http://www.html5rocks.com/en/tutorials/cors/

public HttpResponseMessage Get(string fatherId)
{
	string str = JsonConvert.SerializeObject(GetAleCategorysByFid(fatherId), Formatting.Indented);           
	HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
	result.Headers.Add("Access-Control-Allow-Origin", "*");
	return result;
}

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/52787134

共有 人打赏支持
深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
ajax 设置Access-Control-Allow-Origin实现跨域访问

ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。 即使使用jquery的jsonp方法,type设为POS...

mdoo
2016/07/25
113
0
ajax 设置Access-Control-Allow-Origin实现跨域访问

ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。 即使使用jquery的jsonp方法,type设为POS...

蜗牛奔跑
2016/03/07
72
0
跨域解决方案(二)

CORS 原理:Cross-Origin Resource Sharing ,即跨源资源共享,在现代版浏览器上,增加一些新的请求头和响应头,浏览器通过这些请求头和响应头,判断是否允许我们跨域访问,以及允许的访问的时...

兴趣e族
2016/12/28
0
0
spring mvc+Ajax跨域请求-CORS方式

关于跨域问题,主要用的比较多的是cros跨域和JSONP跨域,JSONP跨域我已经在另外一篇博客中写了,这里主要说的是CORS方式的跨域。 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin re...

别寒
2016/11/02
174
0
Spring MVC通过CROS协议解决跨域问题

现在接手学校网络中心的一个项目,根据团队成员的实际情况以及开发需要,老师希望做到前后端完全分离。后台使用java提供restful API 作为核心,前台无论PC或者移动端可以共用一个核心。前期解...

vstaryw
2016/07/18
102
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7 安装maven

进入指定目录 cd /usr/local/src/ 下载maven 包 # 打开这个地址选中自己需要的版本补齐后面的地址,再复制到SSH去执行wget http://mirrors.hust.edu.cn/apache/maven/maven-3/ 解压改名 ...

Elson
37分钟前
4
0
推荐一个开源数据库迁移神器SQLines

SQLines 是一个开源(Apache License 2.0)可伸缩,并发高性能数据传输和schema 转换工具,你可以用作数据库迁移以及ETL过程 支持的数据库: Oracle and Oracle Exadata Microsoft SQL Server...

Benz001
39分钟前
12
0
面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题

今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一、缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Re...

我最喜欢三大框架
40分钟前
3
0
composer 很慢怎么办?

关于 Composer 的详细安装使用,详见之前的文章:在 PHP 中安装、使用 Composer 包管理工具 Composer 在国内不管是更新还是安装等都有一个「慢」的问题,有的时候真的很煎熬。 因此我们一般会...

whoru
53分钟前
2
0
ffmpeg提取音频文件

问题 从特定的mp3音频文件中,提取一部分作为新的mp3文件 ffmpeg ffmpeg -i a.mp3 -ss 00:25:00 -to 00:28:20 -acodec copy b.mp3 -i输入的文件 -ss从指定时间点开始提取 -to到指定时间点结...

亚林瓜子
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部