【发布时间】:2016-03-11 18:08:06
【问题描述】:
我正在从与发送 GET 的服务器不同的服务器检索图像文件,我得到两个文件,一个位于另一台服务器上 /var/www/html/test/image1.png,另一个文件位于 /var/www/html/test/inside/image2.png 我得到像这样的文件。我知道网址 http://xxx.xxx.xx/test/image1.png 和 http://xxx.xxx.xx/test/inside/image2.png 然后我这样做
function convertToDataURLviaCanvasBOTH(url, callback, outputFormat){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
canvas = null;
};
img.src = url;
}
url1 = http://xxx.xxx.xx/test/image1.png;
url2 = http://xxx.xxx.xx/test/inside/image2.png
data1 = convertToDataURLviaCanvasBOTH(url1);
data2 = convertToDataURLviaCanvasBOTH(url2);
data1 效果很好,我把它拿回来了,但是当它厌倦了url2 它失败了,我得到了错误
Image from origin 'http://xxx.xx.xx.x' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sending-server.com' is therefore not allowed access.
当第二个只是在第一个的子文件夹中时,为什么它对第一个而不是第二个有效?
在根文件目录我也有
Header always set Access-Control-Allow-Origin "http://sending-server.com"
Header always set Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header always set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
在 .htaccess 文件中,该文件应始终发送标头
这里是 url1 的请求头
Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:192.67.64.41
If-Range:"1083f-52648757feb05"
Origin:http://sending-server.com
Range:bytes=2596-2596
Referer:http://sending-server.com/info.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36
以及来自 url2 的请求标头
Provisional headers are shown //THERE IS A WARING SYMBOL ON THIS LINE
Accept:image/webp,image/*,*/*;q=0.8
Origin:http://sending-server.com
Referer:http://sending-server.com/info.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:A760326C-C02F-41C6-A4F6-4B46AA7BC1C3
谢谢
【问题讨论】:
-
@JaromandaX 我是两者的所有者,我添加的内容见上文
-
@JaromandaX 我虽然将 .htaccess 放在第一个目录中,但它是否也适用于所有子目录?我怎样才能确定?
-
您必须在 /test/inside/ 文件夹中允许跨源才能这样做,您必须修改该文件夹中的配置文件
-
@JayMar 好的,不是更高的目录也允许它在更低的目录中吗?你说配置文件的意思是修改我的httpd.conf吗?
-
如果您使用的是 apache,请查看stackoverflow.com/questions/34109354/cross-domain-pdf-loading/…
标签: javascript php .htaccess get cors