web-dev-qa-db-fra.com

PHP ne fonctionne pas pour Access-Control-Allow-Origin

J'utilise le plugin jQuery File Upload de Blueimp pour télécharger des images sur un serveur. Le problème est que le serveur d'envoi est admin.example.com Et le serveur de réception où les images sont stockées est sur www.example.com. Même domaine, sous-domaine différent.

J'ai suivi les instructions ici sur la configuration des téléchargements interdomaines , et tout semble être correct en ce qui concerne le code, mais lorsque j'essaie de télécharger les images, j'obtiens cette erreur:

XMLHttpRequest cannot load http://www.example.com/upload/. Origin http://admin.example.com is not allowed by Access-Control-Allow-Origin.

Le dossier de téléchargement a des autorisations de lecture et d'écriture.

Je vais poster mon code ci-dessous - si quelqu'un peut me montrer comment résoudre ce problème, faites-le moi savoir. J'avais posé des questions à ce sujet avant et j'allais essayer d'autres solutions (téléchargements d'iframe et déplacement de fichiers ftp). Aucun de ces éléments ne conviendra le mieux à ma situation, et ce serait plus facile si je pouvais le faire de cette façon ...

SERVEUR DE RÉCEPTION

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();

SERVEUR D'ENVOI

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,
    });
});

Encore une fois, j'ai essayé le téléchargement du fichier iframe, donc ne le suggérez pas à moins que vous ne puissiez me donner le code de travail complet ...

J'ai également essayé header('Access-Control-Allow-Origin: *'); mais j'obtiens la même erreur ... J'essaie de terminer ceci d'ici le week-end, donc j'apprécierais toute aide que je pourrais obtenir. :)

Merci!

EDIT: voici les en-têtes de réponse pour la requête OPTIONS échouée

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

J'utilise ces en-têtes et son travail pour moi

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

J'essaierais de définir cela sur le web.config puisque vous travaillez sur un serveur IIS:

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

La solution pour moi était de ré-enregistrer le PHP en utilisant le codage UTF-8. Apparemment, le fichier texte d'origine (que j'ai copié en place et écrasé pour le rapide) test) utilisé utilisait un autre codage génial.

0
bob