一、同源策略

        同源策略(Same origin policy)是一种约定,它是浏览器最核心也最主要的安全功能,假设缺少了同源策略,则浏览器的正常功能可能都会受到影响。能够说Web是构建在同源策略基础之的。浏览器仅仅是针对同源策略的一种实现。

        同源策略,它是由Netscape提出的一个著名的安全策略。如今全部支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议。port同样。

当一个浏览器的两个tab页中分别打开来
百度和谷歌的页面当浏览器的百度tab页运行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,仅仅有和百度同源的脚本才会被运行。

        为了好理解,举个样例:
        在localhost:8082和localhost:24253有TEST.js,当中TEST.js内容是alert("Hello World");
 
       localhost:8082的測试代码为:    
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script src="/common/js/lib-base.js"></script>
<script>
function test(){
$.get("http://localhost:24253/TEST.js", function (data) {
console.log(data)
});
$.get("/common/js/TEST.js", function (data) {
console.log(data)
});
$.get("http://localhost:8082/common/js/TEST.js", function (data) {
console.log(data)
});
}
</script>
</head>
<body>
<div><input type="button" value="test" onclick="test()"/></div>
</body>
</html>

点击buttontest后,弹出两个Hello World,当中在请求另外一个域资源的时候。由于同源策略而不能读取。

      
      
 
       可是在页面中增加<script src="http://localhost:24253/TEST.js></script>就能够绕过同源策略。由于这样是本地server訪问远程server的信息。
 
     2、理解JSONP跨域
     JSONP正是为了解决同源策略的问题。它的基本原理就是借助script标签src属性的跨域能力,通过src返回的“回调函数名+json数据”。 然后在前台的回调函数中运行该方法。
 
      我们先来看一个JSONP演示样例:
      在localhost:8082上构建一个json格式数据。然后在localhost:24253上測试:
      locahost:8082的链接和结果例如以下:
 
    在localhost:24253上调用代码例如以下:
    
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="jquery-1.7.2.min.js"></script>
<script>
function CreateScript(src) {
$("<script><//script>").attr("src", src).appendTo("body");
}
function getData() {
CreateScript("http://localhost:8082/eap/testJSONP");
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="button" value="get value from localhost:8082" onclick="getData()" />
</div>
</form>
</body>
</html>
 
运行后,出现例如以下错误,由于传回的json数据会当js运行。
 
 
3、JSONP演示样例(原生构造与JQuery)
如今我们在localhost:8082另构造一个“回调函数+json类型”的方法http://localhost:8082/eap/testJSONP_1?

callback=jsonpcallback

而在localhost:24253通过这样的方式就可以调用成功,代码例如以下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="jquery-1.7.2.min.js"></script>
<script src="json2.js"></script>
<script>
function CreateScript(src) {
$("<script><//script>").attr("src", src).appendTo("body");
}
function getData() {
CreateScript("http://localhost:8082/eap/testJSONP_1?callback=jsonpcallback");
} function jsonpcallback(data) {
alert(JSON.stringify(data));
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="button" value="get value from localhost:8082" onclick="getData()" />
</div>
</form>
</body>
</html>
 
结果例如以下:
 
 


而借助于JQuery则可轻松实现:
  function getData() {
$.ajax({
url: 'http://localhost:8082/eap/testJSONP_1',
dataType: "jsonp",
jsonp: "callback",
success: function (data) {
alert(JSON.stringify(data));
}
})
}

 

版权声明:本文博主原创文章,博客,未经同意不得转载。

原产地政策,jsonp跨域的更多相关文章

  1. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  2. 借助node实战JSONP跨域

    一.前言: 浏览器安全是基于同源策略的.所谓同源策略就是三相同: 1.协议相同: 2.域名相同: 3.端口相同. 但,凡事都是有利弊,同源策略也导致了我们想用AJAX跨域请求,但NO!!为了规避这种限 ...

  3. jsonp跨域+ashx(示例)

    前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件,这时候就访问不了.关于jsonp ...

  4. Jsonp跨域访问

    很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...

  5. jsonp 跨域请求

    背景: JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源 ...

  6. 我的jsonp跨域问题

    关于jsonp跨域问题,在这个方面也是了解一点点,先记录下来,主要作为以后查看,之前下载并安装过wampserver,了解到了jsonp和json的区别,现在谈谈跨域这个问题: 首先什么是跨域,简单地 ...

  7. jsonP跨域调用

    -------------------------------------jsonP跨域调用------------------------------------- <div class=&q ...

  8. JSONP跨域的原理解析( 一种脚本注入行为)

    JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制, 被称为“some-Origin Policy”(同源策略).这一策略对于Jav ...

  9. jsonp跨域问题

    JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式). 同源策略限制 ...

随机推荐

  1. PHPExcel融入ZF2

    下载PHPExcel至vendor下一个 在public\index.php加拿大 require './vendor/Classes/PHPExcel.php'; 之后就能够在不论什么地方按例如以下 ...

  2. 基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

    本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在 ...

  3. HYSBZ 1036(树链剖分)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28982#problem/E 题意:给定一棵树及树上的点权,要求三种操作: 1) ...

  4. .Net C# Windows Service于server无法启动,错误 193:0xc1

    1.情况说明:的近期发展windows维修,当地win7系统正常.把server安装会失败. 图中的引导失败的例子.: 解决方法:执行->输入:eventvwr.msc    打开你的事件查看器 ...

  5. WPF界面设计技巧(3)—实现不规则动画按钮

    原文:WPF界面设计技巧(3)-实现不规则动画按钮 发布了定义WPF按钮的教程后,有朋友问能否实现不规则形状的按钮,今天我们就来讲一下不规则按钮的制作. 不规则按钮的做法实际上和先前我们做不规则窗体的 ...

  6. C# WPF Datagrid的筛选

    public static void SearchResult(DataGrid dg,string condition) { #region string code = string.Empty; ...

  7. Visual Studio Code中配置GO开发环境

    在Visual Studio Code中配置GO开发环境 一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的 ...

  8. MyEclipse中“擅自乱改”项目名导致项目报错的处理

    最近几天培训的过程中,经常有同学手一抖,默默的修改了本来配置部署好的项目名,导致项目报错…… 遇到这种事情,我一般会做的处理就是重新新建项目,然后把包和各种文件ctrl+c ctrl+v,遇到项目小还 ...

  9. 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery

    网页地址 http://blog.csdn.net/lpy3654321/article/details/31841573 项目设想,在项目开发中,我们的开发者大多数时间都在反复开发 相同的keywo ...

  10. vim ---- 自己主动的按钮indent该命令

    当使用vim一段代码的副本到一个程序时,有,经常indent会有一些问题. . 下面的这个强大的命令,使您可以一键码具有很好的格式. gg=G 样品: