7
votes

JQuery Cross Domain Demander en-têtes de réponse

Je fais des demandes Ajax de domaine croisées avec type de données HTML. Ils fonctionnent correctement car j'include xxx pré>

dans la réponse du serveur. Problème est que j'ai besoin d'obtenir certains en-têtes de la réponse du serveur et de ce que je fais, les en-têtes de réponse de "Type de contenu" renvoient NULL. P>

jQuery fait la demande, récupère la réponse, y compris les en-têtes (je peux le voir Du trafic) mais cela ne l'analyse pas. p>

J'ai essayé d'utiliser p> xxx pré>

Cela n'a pas aidé. Voici la réponse de l'échantillon du serveur. P>

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-MYRESPONSEHEADER
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
X-MYRESPONSEHEADER: 24
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 29 Feb 2012 11:34:21 GMT


0 commentaires

4 Réponses :


2
votes

Vous devez ajouter un autre en-tête spécifique à Cors dans la réponse du serveur, Access-Control-Autory-Autory-Headers . Dans ce cas, xxx

ref: https://developer.mozilla.org/fr/http_access_control#Access-Control-veighers


7 commentaires

Cela n'a pas fonctionné pour moi. Pensez-vous que j'ai besoin d'attribuer $ .ajax à une variable?


Votre Demande d'options HTTP retourner les en-têtes de contrôle d'accès approprié?


@nll Pourriez-vous ajouter les en-têtes de demande / réponse complètes pour chacune des deux demandes faites? Première demande est une option et une seconde est d'obtenir / post.


Je ne fais aucune demande d'options manuellement et ne vois pas JQuery le faire. Est-ce une partie du processus? Si oui, comment JQuery Sacherait-il de ça?


C'est une partie du processus et les navigateurs le font dans certains cas avant de faire des appels croisés, conformément aux spécifications. Veuillez noter que JQuery ne fait pas cet appel - les navigateurs font. Pour plus, développeur.mozilla.org/fr/...


Je le teste sur chrome et ne vois aucune demande du navigateur. Quoi qu'il en soit, je vais devoir creuser plus profondément. Merci pour votre temps


Les en-têtes d'accès à la commande d'accès ne contrôlent que les en-têtes de demande peuvent être envoyés. Cela n'influence pas les en-têtes de réponse.



2
votes

Si vous utilisez AWS S3 (et je suppose que cela est applicable sinon), le problème est peut-être une étiquette de configuration de Cors manquante. J'ai couru à un problème similaire avec manquant. Voici ma configuration complétée:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://localhost:3000</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
        <ExposeHeader>*</ExposeHeader>
    </CORSRule>
</CORSConfiguration>


2 commentaires

S3 donne une erreur: ExposeHeader "*" contient des caractères génériques. Nous ne prenons actuellement pas de support Wildcard pour Exposeheader.


Même problème - n'a pas fonctionné avec des caractères génériques. Dans mon cas, j'avais juste besoin du navigateur pour exposer l'en-tête de localisation et cette réponse a fonctionné avec l'en-tête explicitement défini.



2
votes

Pour lire des en-têtes autres que le type de contenu dans la réponse du serveur, le serveur doit alimenter accès-contrôler-exose-têtes code>, par exemple:

Access-Control-Expose-Headers: X-MYRESPONSEHEADER 


0 commentaires

0
votes

Voici la configuration qui a fonctionné pour moi. Je l'ai mis dans la méthode du filtre à filtre Java. Certains en-têtes doivent être envoyés uniquement avec la demande de préfixe (méthode = "Options"), il n'est pas nécessaire de les envoyer à chaque fois.

Veuillez noter que pour "Autorisation" L'en-tête "Access-Control-Autory-Credentials" est également requis. P>

 HttpServletResponse resp = (HttpServletResponse) res;
 resp.addHeader("Access-Control-Allow-Origin", "http://your_domain:your_port");
 resp.addHeader("Access-Control-Allow-Credentials", "true");
 if (((HttpServletRequest) req).getMethod().equals("OPTIONS")) {
       resp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
      resp.addHeader("Access-Control-Allow-Headers", "Authorization");
      return;
  }


0 commentaires