HTML5跨域上传
HTML5 规范定义了 File Api,可以和以往 Flash 上传一样,读取选择的文件信息,还可以监听上传进度显示在页面上。
跨域
使用flash实现时,若文件上传到的地址和当前上传的页面不在同一个域下面,则要加入 crossdomain.xml 跨域允许文件,Flash 会先去取上传地址上的文件看当前域是否得到许可,如果可以则执行上传。
HTML5 上传也有安全机制,一般情况下是不允许跨域上传的,上传前会先去使用http options方法探测有没有权限,地址为上传地址,所以要在上传地址里面加入允许。
在 Java 中,上传地址一般是 Servlet,需要在doPost和doOptions加上Header
doPost主要用于上传,doOptions用于上传过程中监听进度。也就是说没有加doOptions跨域允许也是可以上传的,只无法获取上传的进度,和表单上传没有什么区别。
1 |
|
PHP等,只要在处理上在传的PHP里面加一句话即可
1 | header('Access-Control-Allow-Origin','*'); |
允许多个域
要注意的是 Access-Control-Allow-Origin 只能有一个值,要么是*
即允许所有来源,一看就知道是不安全的。
另外还有一种是固定网址,如 http://www.xxx.com, 需要注意的是,只支持http://www.xxx.com,不能用 *.xxx.com来支持多个。所以如果要像Flash上传一样支持多个网站来源是不可能的,但可以通过代码解决
1 | private String getCrossOrgin(requestUrl){ |