364 votes

L'origine n'est pas autorisée par Access-Control-Allow-Origin

Je suis en train de faire un Ajax.request à distance à un serveur PHP dans un Sencha Touch 2 application (enveloppé dans PhoneGap).

La réponse du serveur est la suivante:

XMLHttpRequest ne peut pas charger http://nqatalog.negroesquisso.pt/login.php. Origine http://localhost:8888 n'est pas autorisé par Access-Control-Allow-Origin.

Comment puis-je résoudre ce problème?

386voto

Matt Mombrea Points 3297

J'ai écrit un article sur cette question, un temps, la Croix de Domaine AJAX.

La façon la plus simple de gérer cela si vous avez le contrôle de la réponse du serveur est d'ajouter un en-tête de réponse pour:

Access-Control-Allow-Origin: *

Cela permettra à la croix-domaine de l' Ajax. En PHP, vous aurez envie de modifier la réponse de la sorte:

<?php header('Access-Control-Allow-Origin: *'); ?>

Vous pouvez simplement mettre la Header set Access-Control-Allow-Origin * réglage du Apache configuration ou fichier htaccess. Juste travailler comme un charme.

Les commentaires, c'est une remarque importante: le générique va permettre à n'importe quel domaine pour envoyer des requêtes à votre hôte. Je recommande de remplacer l'astérisque avec un domaine spécifique qui vous permettra d'exécuter des scripts sur.

64voto

Travis Webb Points 5765

Si vous **** n’avez pas contrôle du serveur, vous pouvez simplement ajouter cet argument à votre lanceur de Chrome : `` .

Notez que je n’utiliserais cette normale « surfer sur le web ». Pour référence, voir ce post : Chrome : désactiver la stratégie de même origine.

Celui que vous utilisez Phonegap pour réellement générer l’application et le charger dans l’appareil, ce ne sera pas un problème.

42voto

Reza Sanaie Points 2930

Si vous utilisez Apache juste ajouter :

dans votre configuration. Cela entraînera toutes les réponses de votre serveur Web pour être accessible depuis n’importe quel autre site sur l’internet. Si vous avez l’intention autoriser uniquement les services sur votre hôte pour être utilisé par un serveur spécifique, vous pouvez remplacer le `` par l’URL du serveur d’origine :

18voto

Caio Proiete Points 524

Si vous avez un ASP.NET / application d’ASP.NET MVC , vous pouvez inclure cet en-tête via le fichier Web.config :

15voto

badMonkey Points 705

C'était la première question/réponse qui est apparu pour moi, en essayant de résoudre le même problème à l'aide de ASP.NET MVC comme la source de mes données. Je me rends compte que cela ne résoudra pas le PHP en question, mais il est lié assez pour être utile.

Je suis à l'aide de ASP.NET MVC. Le blog de Greg Brant a fonctionné pour moi. En fin de compte, vous créez un attribut, [HttpHeaderAttribute("Access-Control-Allow-Origin", "*")], que vous êtes en mesure d'ajouter aux actions de contrôleur.

Par exemple:

public class HttpHeaderAttribute : ActionFilterAttribute
{
    public string Name { get; set; }
    public string Value { get; set; }
    public HttpHeaderAttribute(string name, string value)
    {
        Name = name;
        Value = value;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AppendHeader(Name, Value);
        base.OnResultExecuted(filterContext);
    }
}

Et puis de l'utiliser avec:

[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult MyVeryAvailableAction(string id)
{
    return Json( "Some public result" );
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X