更新时间:2019年01月10日14时02分 来源:传智播客 浏览次数:
同源:同一个域名下不同文件或文件夹之间的访问
跨域:不同域名下之间文件或文件夹之间的访问
通用的一个跨域策略叫jsonp,但不仅仅是jsop能实现跨域,使用iframe,window.name,src,json都可以实现跨域
cors toggle谷歌插件打开可以忽略跨域,仅仅测试使用.
跨域的两种方式
1. 客户端使用jsonp
2. 服务端使用("Access-Control-Allow-Origin: http://www.requesting-page.com")请求头。
但是以上两种都不完美,我们最好使用服务端代理
原理
jsonp:本质是利用了script标签的src属性具有跨域的特性,通过src请求服务器,服务器返回一个函数的调用,来执行本地的JS代码。相当于本地定义好了一个JS脚本,服务器返回一个脚本,只不过这个脚本是个调用脚本
本地JS
1
2
3
4
|
function a ( ) { console. log ( 123 ) ; } |
1
|
a ( ) ; |
AJAX跨域实例
客户端代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
< !DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < title > Document < / title > < / head > < body > < input type = "button" value = "跨域请求" / > < script src = "jquery.min.js" > < / script > < script > function method ( data ) { / / 12 行 console. log ( data ) ; } < / script > < script > $ ( 'input' ) . on ( 'click' , function ( ) { $.ajax ( { url : "server.php" , success : function ( data ) { console. log ( "方法的实际参数是" + data ) ; method ( data ) ; / / 调用 12 行方法 } , dataType : "jsonp" } ) ; } ) ; < / script > < / body > < / html > |
1
2
3
|
$obj = "{'name':'张三'}" ; $cb = $_GET['callback']; echo $cb. "(" .$obj. ")" ; |