【发布时间】:2013-08-30 09:48:29
【问题描述】:
我正在使用jQuery File Upload plugin by Blueimp 将图像上传到服务器。问题是,发送服务器是admin.example.com,而存储图像的接收服务器是www.example.com。同一个域,不同的子域。
我关注了instructions here on setting up cross-domain uploads,就代码而言,一切似乎都是正确的,但是当我尝试上传图片时,我收到了这个错误:
XMLHttpRequest cannot load http://www.example.com/upload/. Origin http://admin.example.com is not allowed by Access-Control-Allow-Origin.
上传文件夹确实有读写权限。
我将在下面发布我的代码 - 如果有人可以告诉我如何解决这个问题,请告诉我。我之前曾问过这个问题,并打算尝试其他一些解决方案(iframe 上传和 ftp 文件移动)。这些都不是最适合我的情况,如果我能这样做,那将是最简单的......
接收服务器
index.php
<?php
header('Access-Control-Allow-Origin: http://admin.example.com'); //I have also tried the * wildcard and get the same response
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
?>
<?php
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
$upload_handler = new UploadHandler();
发送服务器
main.js
$(function () {
'use strict';
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
// Uncomment the following to send cross-domain cookies:
xhrFields: {withCredentials: true},
url: 'http://admin.example.com/upload/',
disableImageResize: false,
dropZone: $('#dropzone'),
imageMaxWidth: 1800,
imageMaxHeight: 1800,
});
});
我再次尝试了 iframe 文件上传,所以请不要建议它,除非你能给我完整的工作代码......
我也尝试过header('Access-Control-Allow-Origin: *');,但遇到了同样的错误...我正在努力在周末之前完成这项工作,因此我将不胜感激。 :)
谢谢!
编辑:这是失败的 OPTIONS 请求的响应标头
Allow:OPTIONS, TRACE, GET, HEAD, POST
Content-Length:0
Date:Tue, 27 Aug 2013 15:08:29 GMT
Public:OPTIONS, TRACE, GET, HEAD, POST
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
【问题讨论】:
-
查看您的浏览器发出的请求。它将首先执行一个 OPTIONS 请求(不是 GET 或 POST)。检查您的服务器是否回复了正确的标头。 real 请求实际上并不需要 CORS 标头。
-
看来他正在处理 OPTIONS
-
@FritsvanCampen 在上面看到我的编辑,看不到任何
Access-Control-Allow-Origin... -
好吧,我没有看到 CORS 标头,所以请确保您的脚本被
OPTIONS请求调用。 -
@FritsvanCampen 所以我需要在标题中添加
Access-Control-Allow-Headers???
标签: php jquery iis upload cross-domain