web-dev-qa-db-ja.com

PHPヘッダーがAccess-Control-Allow-Originで機能しない

BlueimpによるjQuery File Uploadプラグイン を使用して、サーバーに画像をアップロードしています。問題は、送信サーバーが_admin.example.com_であり、画像が保存されている受信サーバーが_www.example.com_にあることです。同じドメイン、異なるサブドメイン。

クロスドメインアップロードの設定に関する指示 に従い、コードに関してはすべて正しいようですが、画像をアップロードしようとするとこのエラーが発生します:

_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
_
15
Caleb

私はこのヘッダーとその作業を私のために使用します

header('content-type: application/json; charset=utf-8');
header("access-control-allow-Origin: *");
25
Aitem

IISサーバーで操作しているため、web.configでこれを設定しようとします。

https://Gist.github.com/corydeppen/3518666

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <!-- allowing all-->
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
    </httpProtocol>
</system.webServer>
1
Hong

私にとっての解決策は、PHPファイルを再保存することでした。明らかに元のテキストファイル(私はその場所にコピーして、テスト)使用された他のいくつかのファンキーなエンコーディングを使用していました。

0
bob