项目内其中一个管理后台需要发布文章,需要一个富文本编辑器,经过一番选择后,最终选择了百度的Ueditor。
由于上传的文件是上传到另一台专门存放图片等静态资源的服务器上面的,所以就涉及到了跨域上传。
我实现跨域上传的主要方式是将编辑器的前后端分离,前段直接放到需要用的项目内,接收上传的后端(已做权限验证)放到图片服务器上面。
跨域要添加两个HTTP头:
class="prettyprint lang-php prettyprinted">Access-Control-Allow-Origin: *//允许任意域名发起的跨域请求
Access-Control-Allow-Headers: X-Requested-With,X_Requested_With
开发机器用的是WIN7,、IIS7 在开发机器上面进行的跨域上传一切正常,然后就在IIS6上面进行了调试。
当项目运行在IIS6上面的时候就开始了爬坑经历。
首先遇到的是403.1错误。
后端处理代码是用的“一般处理程序”ashx,默认IIS6不接受OPTIONS请求,所以要为ashx添加允许OPTIONS请求。
一切就绪后,悲剧又发生了。
这次又迎来了500错误。
经过1天的资料查阅都没找到解决方法,最后在火狐上发现了蛛丝马迹:CORS。
HTML5上传的时候就是用的CORS规范,即:在发送真正的上传请求之前会先发送一条OPTIONS请求给服务器,这时候需要服务器响应允许跨域上传的HTTP头,然后中断输出。浏览器接到允许跨域上传的HTTP头后会再次发起真正的上传文件请求(POST)。
根据CORS规范,在后端代码进行OPTIONS响应,然后中断输出就可解决。
文字表达能力不是很好,见谅。