出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
例如:
二 解决AJAX跨域请求的三种方式
方式一 jsonp跨域处理
代码演示如下:
前端页面
- <html>
- <head>
- <title>$Title%sSourceCode%lt;/title>
- <meta charset="UTF-8"/>
- <script src="js/jquery.min.js">script>
- <script>
- function checkUname(){
- // 获取输入框中的内容
- if(null == $("#unameI").val() || '' == $("#unameI").val()){
- $("#unameInfo").text("用户名不能为空");
- return;
- }
- $("#unameInfo").text("");
- // 通过jQuery.ajax() 发送异步请求
- $.ajax(
- {
- type:"GET",// 请求的方式 GET POST
- url:"http://localhost:8080/ajaxDemo3_war_exploded/unameCheckServlet.do?", // 请求的后台服务的路径
- data:"uname="+$("#unameI").val(),// 提交的参数
- success:function(info){ // 响应成功执行的函数
- $("#unameInfo").text(info)
- }
- }
- )
- }
- script>
- head>
- <body>
- <form action="myServlet1.do" >
- 用户名:<input id="unameI" type="text" name="uname" onblur="checkUname()">
- <span id="unameInfo" style="color: red">span><br/>
- 密码:<input type="password" name="pwd"><br/>
- <input type="submit" value="提交按钮">
- form>
- body>
- html>
浏览器请求该资源的地址是:
http://127.0.0.1:8020/testa/index.html
但是其内部ajax请求的资源是http://localhost:8080/ajaxDemo3_war_exploded/unameCheckServlet.do?
二者端口号和IP其实是不一致的,这就受到同源策略的控制
实现的原理是什么?
我们发现Web页面上调用js文件时则不受是否跨域的影响,拥有”src”这个属性的标签都却拥有跨域的能力,比如<\script>、<\img>、<\iframe>。那么跨域访问数据就有了一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理。就好比使用一个