跨域资源共享(Cross-Origin Resource Sharing)

  目前中文方面的资料还比较少,能搜索到的那仅有的几篇相关介绍,也几乎是雷同的,其中C#方面的更是少之又少。

  XMLHttpRequest接口是Ajax的根本,而Ajax考虑到安全性的问题,是禁止跨域访问资源的。 也就是说:www.baidu.com的页面无法通过Ajax来调用www.cnblogs.com的资源。

  但jQuery的$.ajax()明明就可以跨域访问啊!对,的确是跨了,但那是jsonp(JSON with Padding)!利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。关于jsonp的介绍也很多了,这里不扯。

  关于使用以本地代码示例为例:

  同样还是两个Web站点,客户端代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">

<script src="jquery-1.8.2.min.js"></script>
<script>
  var res=null;
  $(function() {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://localhost:46226/hand.ashx", true);
    xhr.onreadystatechange= function() {
      res = xhr.responseText;
    }
    xhr.send();
  });

function b_c() {
  alert(res);
}
</script>
</head>
<body>
  <input type="button" value="跨域" onclick="b_c();" />
</body>
</html>

  从客户端可以看出和异步请求没什么变化,对确实没有变化,但需要服务器的配合。

  服务器代码如下:

public class hand : IHttpHandler
{

  public void ProcessRequest(HttpContext context)
  {
    context.Response.ContentType = "text/plain";
    context.Response.AppendHeader("Access-Control-Allow-Origin", "http://localhost:44860");//也可以为*是任何请求
    context.Response.Write("YangYuJie");
    context.Response.End();
  }

  public bool IsReusable
  {
    get
    {
      return false;
    }
  }
}

  太不可思议了,简直没有多大的变化。是的

  以上的配置的含义是允许<http://localhost:44860>域发起的请求可以获取当前服务器的数据。

  当然,如果设置成<*>这样有很大的危险性,恶意站点可能通过XSS攻击我们的服务器。

  如果仅支持http://localhost:44860这个站跨域访问,那就:如上面的配置。

  效果图如下:

时间: 2025-01-31 06:50:31

跨域资源共享(Cross-Origin Resource Sharing)的相关文章

浅析Cross Origin Resource Sharing

在前面我们已经简单介绍了如何利用XMLHttpRequest Object来进行客户端与服务器之间的通信,但是,基于这种XMLHttpRequest Object的AJAX通信技术有一个局限,出于对于数据安全性的考虑,XMLHttpRequest只能够访问同一个站点的数据(相同的请求协议,相同的域名,相同的服务器端口).但是在日常的开发过程中,我们又的的确确有很多的地方需要跨越站点之间传输数据,比如银行网站,需要通过证监会或者金管局或者其他的第三方金融机构获取一些金融方面的信息,例如最新的金融规

Ajax本地跨域问题 Cross origin requests are only supported for HTTP

问题:打开本地html文件时,报错如下 Cross origin requests are only supported for protocol schemes: http, data,chrome-extension, https, chrome-extension-resource. 分析:浏览器为了安全性考虑,默认对跨域访问禁止. 解决:给浏览器传入启动参数(allow-file-access-from-files),允许跨域访问. Windows下,运行(CMD+R)或建立快捷方式:

spring 设置跨域 CORS (Cross Origin Resources Share) 跨域

Spring提供了三种方式跨域 1.CorsFilter 过滤器 2.<mvc:cors> Bean 3.@CrossOrigin注解 以上三种方式本质都是用来配置CorsConfiguration 1.CorsFilter 过滤器 首先创建一个自己的过滤器 这里我创建一个类,名字为MyCorsFilter import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.Url

Node.js 【CORS(cross origin resource sharing) on ExpressJS之笔记】

app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); app.get('/', function(req,

Ajax本地跨域问题 Cross origin requests are only supported for HTTP(针对jQuery基础教程第四版第六章)

出现的问题: 解决的步骤: 谷歌浏览器出现的效果: 针对jQuery基础教程(第四版),第六章  成功: 原文地址:https://www.cnblogs.com/qinghui258/p/8432569.html

本地数据访问时出现跨域问题Cross origin requests are only supported for protocol schemes: ……

从桌面找到Chrome图标,右键属性,快捷方式,起始位置(安装路径) 注:在cmd中访问Program Files文件的方法 %ProgramFiles%=C:\Program Files %ProgramFiles(x86)%=C:\Program Files (x86) %ProgramW6432%=C:\Program Files 在命令行用start启动Chrome,然后加参数   (前面加一个空格)--disable-web-security --user-data-dir="E:/a

跨域的另一种解决方案CORS(CrossOrigin Resource Sharing)跨域资源共享

在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本.但是Javascript脚本是不能获取这些资源的内容的,它只能被浏览器执行或渲染.主要原因还是出于安全考虑,浏览器会限制脚本中发起的跨站请求.(同源策略, 即JavaScript或Cookie只能访问同域下的内容).跨域的解决方案有多重JSONP.Flash.Iframe等,当然还有COR

跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享

在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本.但是Javascript脚本是不能获取这些资源的内容的,它只能被浏览器执行或渲染.主要原因还是出于安全考虑,浏览器会限制脚本中发起的跨站请求.(同源策略, 即JavaScript或Cookie只能访问同域下的内容).跨域的解决方案有多重JSONP.Flash.Iframe等,当然还有COR

(转)跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享

在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本.但是Javascript脚本是不能获取这些资源的内容的,它只能被浏览器执行或渲染.主要原因还是出于安全考虑,浏览器会限制脚本中发起的跨站请求.(同源策略, 即JavaScript或Cookie只能访问同域下的内容).跨域的解决方案有多重JSONP.Flash.Iframe等,当然还有COR

CORS(跨域资源共享)

1, 简介CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制. CORS需要浏览器和服务器同时支持.它的通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样.浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次