上传文件的跨域处理(转)
(文章轉自:http://blog.robotercoding.com/?p=62)
?
為了減輕主服務器的負擔,希望把圖片的處理單獨拿出來,由圖片服務器來處理圖片上傳,瀏覽等操作。圖片上傳使用了ajax方式,采用了ajaxfileupload控件,它動態生成了一個iframe,由iframe來接受上傳結果。以前的操作都在www.***.com上處理,這個控件用得不錯,分開之后,由img.***.com來負責上傳,結果問題就來了,iframe的contentWindow以及contentDocument下面的document拒絕訪問。google之后,發現應該是跨域問題,按照道理來說,兩個子域的跨域應該很好解決。無非是設置document.domain,主頁面中如下設置:
<script language=”text/javascript”>
document.domain = “***.com”;
</script>
在iframe中的onload事件函數中,也設置了document.domain = “***.com”;測試了一下,行不通,還是會報“拒絕訪問”,雖然Firebug已經看到了返回值。對javascript不是很熟悉,不知道iframe中這樣設置document.domain是否合法。
然后再google了一堆資料,針對跨域的處理有很多方式:jquery的jsonp技術,動態地添加一個<script>標簽,因為script標簽的src屬性是沒有跨域的限制,但是好像只能get,不支持post。還有通過服務器中轉,數據先到達www.***.com,由www服務器發送到img服務器進行處理,這樣也沒有問題,但是數據繞了一圈,費時費力。
這個時候想起了nginx的代理設置,是否能夠將www服務器的目錄映射成img服務器呢?我想應該可以的,那就嘗試一下。
首先給ubuntu裝上dns服務器,可以模擬這些域名進行測試。然后配置nginx如下:
upstream hosts_www_com {
server 192.168.1.2:80;
}
server {
listen?????? 80;
server_name? www.***.com;
access_log? /var/log/nginx/***.host.access.log;
location ~ ^/imgupload/ {
proxy_pass????????http://192.168.1.129;?#圖片服務器的ip
proxy_set_header? X-Real-IP? $remote_addr;
proxy_redirect off;
}
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_pass?http://hosts_www_com;
proxy_set_header? x-real-IP? $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
然后再測試一下,OK了。
update:
django中跨域讀取cookie,可以直接設置
SESSION_COOKIE_DOMAIN = ‘.abc.com’
注意前綴一定要有點(.)
轉載于:https://www.cnblogs.com/Deasel-s-magic-box/archive/2012/09/20/2695288.html
總結
以上是生活随笔為你收集整理的上传文件的跨域处理(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac查看图片下一张
- 下一篇: 后台设置 datakeynames