7
votes

Toute façon de passer au-delà de l'accès au contrôle d'accès au développement sur mon propre serveur?

Je reçois cette erreur JavaScript

xmlhttprequest ne peut pas charger http://foo.bar.no/api/map_tools/clean_addresses/check. Origine http://foo.bar.noO:9294 n'est pas autorisée par l'accès à la commande d'accès.

Tout cela est tout sur le même domaine et le même serveur, mais mon projet JavaScript est hébergé par un script de serveur autonome qui regroupe automatiquement le JavaScript et ses dépendances dans un fichier.

Comment puis-je dépasser cette restriction pendant que je me développe?


J'ai essayé d'autoriser mon script de serveur JavaScript à se connecter. Ceci est le résultat d'une courbe à l'URL: xxx

et je reçois toujours la même erreur que je colle ci-dessus. Pourquoi Chrome refuse-t-il toujours de se connecter à la fichus URL quand il est évidemment autorisé à!?


3 commentaires

Les règles de détermination d'un d'une violation de la commande d'accès à la commande sont assez strictes: toute différence avant la première barre oblique, y compris le port, le protocole (http vs. https) et le sous-domaine, Thoué une demande d'Ajax traditionnelle à base de XHR ( Bon article en Encosia)


Oui j'ai senti ça. Y a-t-il quelque chose que je peux mettre mon navigateur en "mode de développement" ou quelque chose où il fera fermer le% ¤ # @ Up pendant que je me développe? Tout navigateur Windows ferait


Vous utiliseriez JSONP ou un proxy pour demander d'autres URL de domaine. L'article propose une alternative utilisant la norme CORS pour le contourner.


3 Réponses :


1
votes

Utilisez les capacités de proxy inverse de votre serveur Web à proxy http://foo.bar.no/ API / MAP_TOOLS / CLEAN_ADDRESSES / Vérifiez à http://foo.bar .no: 9294 / API / map_tools / Clean_addresses / Vérifiez .

Ainsi, lorsque vous utilisez Apache, vous devez ajouter quelque chose comme P>

    <Proxy *>
            Order allow,deny
            allow from all
    </Proxy>

    ProxyPass /API/map_tools/ http://foo.bar.no:9294/API/map_tools/
    ProxyPassReverse /API/map_tools/ http://foo.bar.no:9294/API/map_tools/


5 commentaires

Je n'ai rien compris de ça, désolé


Quel site Web utilisez-vous pour le développement?


Le serveur: 80 est Apache, mais le: 9294 est un script de noeud


Cela ressemble à une bonne solution à long terme, mais je cherchais vraiment quelque chose de moins invasif (de préférence une solution que je pouvais s'appliquer juste à mon côté client JavaScript), car il s'agit d'un contournement de sécurité de développement à court terme.


Le problème que j'ai trouvé avec ceci est que Apache affiche "503 service non disponible" pendant une longue période (jusqu'à quelques minutes) chaque fois que le serveur de nœuds sous-jacent est redémarré. Ceci n'est définitivement pas une bonne solution pour le développement où le serveur peut avoir besoin de redémarrer très souvent.



2
votes

OK je l'ai compris. Je cherchais une solution simple et rapide depuis que je n'ai besoin que des demandes de développement croisées à des fins de développement. Il s'avère que je viens de définir les deux xxx

dans mon script php sur Apache. Puis dans mon code javascript: xxx

et qui a fait le tour


0 commentaires

1
votes

Vous pouvez contourner les restrictions de sécurité croisées dans le chrome en le démarrant avec le - désactivation-web-sécurité code> drapeau.

E.g. (ON OS X): P>

open /Applications/Google\ Chrome.app/ --args --disable-web-security


1 commentaires

Il m'a fallu un moment pour que cela fonctionne. Les processus chromés sur Windows ne semblent pas vouloir mourir, même après que je refuse spécifiquement Chrome de courir en arrière-plan. Tant que les processus sont en cours d'exécution, le démarrage de l'exécutable Chrome n'ouvre qu'une nouvelle fenêtre dans les processus existants, ce qui ne fonctionne donc qu'après une fermeture approfondie du chrome en utilisant le gestionnaire de tâches. Cela signifiait également que j'ai perdu tous mes onglets ouverts ... Le menu "récemment fermé" est même parti.