2015-09-05 40 views
0

首先,我嘗試使用onload事件等來正常獲取圖像,但canvas不讓我將其導出,因爲它「受感染」或其他。嘗試使用Ajax獲取圖像時的訪問控制源問題

於是我試圖讓像瀏覽器中的圖像不(GET請求),但它仍然沒有讓我得到

var xhr = new XMLHttpRequest(); 
xhr.open('GET', url, true); 
xhr.responseType = 'blob'; 
xhr.onload = function(e){ 
if(this.status == 200){ 
    do things 
}  
}; 
xhr.send(); 

我不明白的數據爲何此安全限制的東西存在,如果瀏覽器可以直接訪問圖像?與我使用javascript獲取圖像數據不是一回事嗎?

回答

2

於是我試圖讓像瀏覽器中的圖像不(GET請求),

帆布和XMLHttpRequest的均採用CORS具有權限才能在不同的來源訪問數據。您從中請求數據的服務器必須設置CORS頭以授予該權限。

我不明白爲什麼這個安全限制的東西存在,如果瀏覽器可以直接訪問圖片?與我使用javascript獲取圖像數據不是一回事嗎?

直接訪問圖像會將圖像顯示給用戶。

使用JavaScript訪問圖像將允許網站的作者對圖像數據做任何他們喜歡的操作,包括將其複製到自己的服務器上。

該圖像可能包含Joe Random網站不應該能夠複製的數據(例如http://financial.intranet/my/secret/company/financial/chart.png),只需要訪問者的瀏覽器獲取它而不是直接獲取它。

該數據可能受到IP檢查,網絡路由,HTTP驗證,Cookie或一系列瀏覽器可以設置的其他安全限制的保護。如果任何網站可以讓訪問者的瀏覽器代表他們提出請求,那麼任何網站都可以模仿他們的任何一個訪問者並獲得祕密。

+0

以及它仍然沒有意義,因爲我可以使用捲曲在服務器上獲得該圖像,這只是更煩人的 – thelolcat

+0

,但感謝解釋爲什麼發生這種情況:) – thelolcat

+0

@thelolcat - 如果你可以使用cURL獲取圖像,那很好,但瀏覽器不知道你可以做到這一點。託管映像的服務器可能會檢查瀏覽器的IP地址,或者需要cookie,或者位於運行cURL的服務器無法訪問的Intranet上。 – Quentin

相關問題