項目內其中一個管理后臺需要發布文章,需要一個富文本編輯器,經過一番選擇后,最終選擇了百度的Ueditor。
由于上傳的文件是上傳到另一臺專門存放圖片等靜態資源的服務器上面的,所以就涉及到了跨域上傳。
我實現跨域上傳的主要方式是將編輯器的前后端分離,前段直接放到需要用的項目內,接收上傳的后端(已做權限驗證)放到圖片服務器上面。
跨域要添加兩個HTTP頭:
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響應,然后中斷輸出就可解決。
文字表達能力不是很好,見諒。
新聞熱點
疑難解答