Maison > Questions et réponses > le corps du texte
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.com
和http://127.0.0.1/api/web
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
, 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
.
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.
某草草2017-05-16 17:17:58
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
响应头
所以,你应该有处理这个OPTIONS
En 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 : 🎜
rrreeePHPz2017-05-16 17:17:58
$.ajax({
url: 'http://api.zlzkj.com/admins/1',
type: 'DELETE',
dataType: 'JSON',
crossDomain:true
});