以下所涉及的基本都需要有服务器端的权限,没有请绕道~ ,当然也可以当学习哈~
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