2017-03-12 4 views
3

Je suis en train de passer de Cloudant à Jelastic sur flow.ch. Je reçois des erreurs CORS avec pouchdb lors d'un test local (service ionique).CORS problème avec CouchDB + credentials + origine wildcard

Y a-t-il une autre configuration dans Jelastic en dehors de CouchDB qui me manque?

XMLHttpRequest ne peut pas charger http://xxx.flow.ch/xxx. La réponse à la demande de contrôle en amont ne passe pas contrôle d'accès vérification: La valeur de l'en-tête 'Access-Control-Allow-Origin' dans la réponse ne doit pas être le caractère générique '*' lorsque le mode d'identification de la demande est 'include'. L'origine 'http://localhost:8100' n'est donc pas autorisée. Le mode d'identification des demandes initiées par XMLHttpRequest est contrôlé par l'attribut withCredentials.

  1. Je configuré un CouchDB sur Jelastic et activé CORS. enter image description here enter image description here

  2. accès normal fonctionne CURL. La réplication de Cloudant vers Jelastic a également fonctionné.

  3. J'ai essayé d'utiliser une extension Chrome pour activer "Autoriser-Control-Allow-Origin: *"

+1

Je pense que la cause du problème que vous voyez est uniquement liée à une déficience de couchdb, et le fait que vous utilisiez jelastic n'a aucun effet de toute façon, et le code client que vous utilisez n'a pas d'importance (Il importe seulement que le client envoie une demande d'origine croisée avec des informations d'identification, de sorte que vous rencontriez le même problème si vous utilisiez un autre code client qui l'a fait). – sideshowbarker

Répondre

3

Le couchdb docs unfortunately say this:

Vous ne pouvez pas définir origins = * et credentials = true options en même temps

Cela semble impliquer que si vous voulez des demandes d'origine croisée avec des informations d'identification pour travailler avec couchdb, vous devez définir la valeur origins sur une liste explicite d'origines autorisées; par exemple:

[cors] 
origins = http://localhost, https://localhost, http://couch.mydev.name:8080 

Soit dit en passant, il semble que cela devrait être soulevée comme CouchDB. Il n'y a pas de bonne raison pour que couchdb ne prenne pas en charge l'autorisation de requêtes de toutes les origines lorsque credentials = true est défini.

La plupart des autres systèmes de serveurs Web prennent en charge la prise en charge des demandes de toutes les origines lorsque des informations d'identification sont incluses. La façon dont ils le font tous est de simplement prendre la valeur de l'en-tête de la demande Origin, et essentiellement juste revenir à la valeur de l'en-tête de réponse Access-Control-Allow-Origin.

Il est trivial d'implémenter le code serveur qui fait cela. Mais à défaut de corriger réellement cette lacune, les mainteneurs couchdb doivent au moins corriger leur code de gestion de configuration pour échouer fortement lorsque vous essayez de définir à la fois origins = * + credentials = true.

Parce que la chose est, cette déclaration « Vous ne pouvez pas définir origins = * et l'option credentials = true au même » dans la documentation n'est pas vrai.Clairement vous pouvez ensemble les deux en même temps (comme le prouve votre capture d'écran de config) -il est juste que le système n'émet aucune sorte d'avertissement/erreur évident pour vous dire que les demandes d'informations envoyées échoueront si vous avez couchdb défini de cette façon.

+0

Ce n'est pas spécifique CouchDB .. C'est en fait une spécification pour [CORS] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials). Donc, aucun système côté serveur qui a une configuration CORS ne le permet –

+0

Ce qui est spécifique à couchdb à ce sujet, c'est que couchdb ne fournit aucun moyen d'écho automatique de l'origine dans la réponse. La plupart des autres systèmes côté serveur prenant en charge CORS offrent cette fonctionnalité. – sideshowbarker