以下所涉及的基本都需要有服务器端的权限,没有请绕道~ ,当然也可以当学习哈~
GET
这个普通的jsonp就可以了,其实就是远程调个本地的函数。。谷歌去吧。
POST
发现个有意思的,就是file条件下可以无视跨域,这种做内置浏览器的时候可以好好利用下。
AJAX 这个是本篇最纠结的
普通提交依旧通过jsonp解决
关于表单提交和文件的上传
需要服务器端头的设置
相关原理参考: http://drops.wooyun.org/tips/188
服务器端的设置代码为
if (isset ( $_SERVER ['HTTP_ORIGIN'] )) {
header ( "Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}" );
header ( 'Access-Control-Allow-Credentials: true' );
header ( 'Access-Control-Max-Age: 86400' ); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER ['REQUEST_METHOD'] == 'OPTIONS') {
if (isset ( $_SERVER ['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] ))
header ( "Access-Control-Allow-Methods: GET, POST, OPTIONS" );
if (isset ( $_SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'] ))
header ( "Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}" );
// exit(0);
}
XMLHttpRequest Level 2
是否支持跨域的脚本验证
var xhr = new XMLHttpRequest();
if (typeof xhr.withCredentials == undefined) {
document.write("fuck");
//This browser does not support xhr2 yet.
} else {
document.write("true");
//Go head!
}
简单数据提交
xhr.open("POST", "http://xxxxxxx", true);
xhr.onload = function(data) {
document.write("ok");
document.write(data);
//加载完咯...
}
//支持跨域发送cookies 改成true 就发不了... 和顺序没有关系
//xhr.withCredentials = true;
xhr.send();
上传相关文件从这获取,别人写好的,使用的是html5的特性。不过要积分。javaeye那边无需积分
http://blog.csdn.net/never_say_goodbye/article/details/8598521
上传的文件的提取不同于表单的提交,也不能简单通过查看chrome的表单请求头做判断
上传的文件名
$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
注:这样获取的文件名在apache下可用。在nginx 里会无法获取。可直接通过判断php://input进行文件传入判断,完善点可以再通过获取文件头判断文件类型。
上传的文件数据,单个。。
file_get_contents('php://input')
转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827