Comment Nginx effectue-t-il la configuration inter-domaines afin de pouvoir utiliser les méthodes de requête DELETE et PUT ?
大家讲道理
大家讲道理 2017-05-16 17:15:58
0
2
1397

Description du fond

Préparation à la conception d'une API Restful basée sur Nginx, qui nécessite les méthodes de requête DELETE et PUT et prend en charge l'accès inter-domaines. Actuellement, il existe deux domaines de test d'hôtes virtuels locaux. http://api.zlzkj.comhttp://127.0.0.1/api/web

Description du problème

Configuration inter-domaines liée à nginx.conf

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;

demande ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
    Resetful Api设计
    <script src="http://c.csdnimg.cn/public/common/libs/jquery/jquery-1.11.1.min.js"></script>
    <script>
        $.ajax({
            url: 'http://api.zlzkj.com/admins/1',
            type: 'DELETE',
            dataType: 'JSON'
        });
    </script>
</body>
</html>

La méthode de requête DELETE peut être utilisée normalement dans

http://api.zlzkj.com/下访问http://api.zlzkj.com/admins/1

Dans

, vous constaterez que la méthode de requête est filtrée en mode OPTINOS. Normalement, elle devrait être en mode DELETE, ce qui entraîne la méthode 405 du serveur non autoriséehttp://127.0.0.1/api/web/下访问http://api.zlzkj.com/admins/1.

J'ai également trouvé des articles connexes sur le mur. Il semble qu'une fois leur Nginx configuré comme ceci, la méthode de requête DELETE peut être utilisée normalement sur tous les domaines. Cependant, de mon côté, elle ne peut être utilisée que dans le même domaine. La méthode de requête sera filtrée dans OPTINOS sur la méthode des domaines, cela a provoqué une erreur 405.

Est-ce un problème avec la version Nginx ? Problème de configuration de l'environnement ? J'espère que vous pourrez me donner quelques idées, merci.

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(2)
某草草

La requête

OPTIONS est spéciale. Cette méthode est utilisée pour demander au serveur de lui indiquer quelles autres fonctions et méthodes il prend en charge. OPTIONS请求比较特殊,该方法用于请求服务器告知其支持哪些其他的功能和方法。
在跨域的时候,浏览器会自动发起一个OPTIONS请求。
当你的服务器响应了OPTIONS请求的时候,会有类似如下的响应:

Allow → GET,HEAD,POST,OPTIONS,TRACE
Cache-Control → max-age=86400
Connection → keep-alive
Content-Encoding → gzip
Content-Length → 20
Content-Type → text/html
Date → Thu, 30 Jun 2016 04:00:24 GMT
Expires → Fri, 01 Jul 2016 04:00:24 GMT
Server → bfe/1.0.8.14
Vary → Accept-Encoding,User-Agent

如果你的服务器没有处理响应OPTIONS,会有如下的响应:

Connection → keep-alive
Content-Encoding → gzip
Content-Type → text/html
Date → Thu, 30 Jun 2016 04:02:35 GMT
Server → nginx/1.4.6 (Ubuntu)
Transfer-Encoding → chunked

可以看出,缺少了Allow响应头
所以,你应该有处理这个OPTIONSEn cas de cross-domaine, le navigateur lancera automatiquement une requête OPTIONS.
Lorsque votre serveur répondra à la requête OPTIONS, il y aura une réponse similaire à la suivante :

if ($request_method = 'OPTIONS') { 
add_header Access-Control-Allow-Origin *; 
add_header Access-Control-Allow-Credentials true; 
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; 
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; 
return 204; 
}
🎜Si votre serveur ne traite pas la réponse OPTIONS, il y aura la réponse suivante : 🎜 rrreee 🎜On peut voir que l'en-tête de réponse Allow est manquant🎜Vous devriez donc avoir un service pour gérer cette requête OPTIONS. Cela peut être fait directement avec nginx. la configuration, ajoutez Voici la configuration suivante : 🎜 rrreee
PHPzhong
$.ajax({
    url: 'http://api.zlzkj.com/admins/1',
    type: 'DELETE',
    dataType: 'JSON',
    crossDomain:true
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal