javascript - En-tête CORS manquant 'Access-Control-Allow-Origin', comment résoudre le problème?
黄舟
黄舟 2017-05-16 13:16:09
0
6
2240
<html>
    <head>
        <meta http-equiv="access-control-allow-origin" content="https://openapi.lechange.cn">
        <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
        <script>
            $.post('https://openapi.lechange.cn/openapi/accessToken',{"system":{"ver":"1.0","sign":"5326bdd79317a8cd215b649e75e042b6","appid":"lace1fdddaa5de4393","time":"1491895621","nonce":"49735441495760803893403522385895","appSecret":"6d5c2c727dbb4ba78fac5a0e9ece82"},"params":{"phone":"17691260000"},"id":"80"},function(data){console.log(data);},'json');
        </script>
    </head>
    <body>
        <a></a>
    </body>
</html>

Lors de l'exécution sur Firefox, le message d'erreur suivant apparaît. Requête d'origine croisée bloquée : La politique de même origine interdit la lecture de la ressource distante située à l'adresse https://openapi.lechange.cn/o... (Cause : l'en-tête CORS 'Access-Control-Allow-Origin' est manquant).
La solution trouvée dans les recherches en ligne consiste à ajouter un en-tête à la page demandée. Cela ne peut pas être géré, et d'autres méthodes ne peuvent pas non plus le résoudre. Comment le résoudre?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(6)
Peter_Zhu

CORS n'a généralement pas besoin d'être configuré dans le navigateur. Le navigateur détecte que cette requête AJAX d'origine croisée est une requête simple et ajoute automatiquement un champ Origine aux informations d'en-tête. Le champ Origine est utilisé pour indiquer quelle source (protocole). ) provient de cette requête. + nom de domaine + port).
Le serveur décide d'accepter ou non la demande en fonction de cette valeur, ce qui signifie que le serveur aura une liste blanche indiquant quelles sources sont autorisées, et Access-Control-Allow-Origin est inclus dans la liste blanche en-tête de réponse.
Le navigateur constate que les informations d'en-tête de cette réponse ne contiennent pas le champ Access-Control-Allow-Origin. Il sait donc que quelque chose s'est mal passé et renvoie une erreur. Autrement dit, l'invite que vous avez rencontrée indique que le résultat renvoyé était. intercepté par le navigateur, et ce n’est pas que la demande ne puisse pas être envoyée.

Il vous faut donc configurer cette liste blanche sur le serveur, pas changer la page.

Pour le principe de CORS, vous pouvez vous référer à cet article
Pour comment configurer Tomcat, vous pouvez lire ce document

仅有的幸福

Pouvez-vous utiliser jsonp sur plusieurs domaines ?

$.ajax({
    url: 'https://openapi.lechange.cn/openapi/accessToken',
    type: 'post',
    dataType:'jsonp',
    data: '{"system":{"ver":"1.0","sign":"5326bdd79317a8cd215b649e75e042b6","appid":"lace1fdddaa5de4393","time":"1491895621","nonce":"49735441495760803893403522385895","appSecret":"6d5c2c727dbb4ba78fac5a0e9ece82"},"params":{"phone":"17691260000"},"id":"80"}',
    success:function(data){
       console.log(data);
     },
})
小葫芦

cors ne nécessite pas de configuration front-end, laissez vos ingénieurs back-end le configurer sur le serveur

小葫芦

Nginx ajoute la prise en charge des en-têtes

左手右手慢动作

Utilisez node ou python pour écrire un relais de robot ou ajouter un proxy

淡淡烟草味

Collez le code suivant en haut du fichier d'entrée côté serveur

Après être en ligne, il est préférable de remplacer le * dans Access-Control-Allow-Origin: * par un nom de domaine spécifique qui permet l'accès

header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:HEAD,GET,POST,OPTIONS,PATCH,PUT,DELETE');
header('Access-Control-Allow-Headers:Origin,X-Requested-With,Authorization,Content-Type,Accept,Z-Key');
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal