2017-01-05 1 views
0

J'essaie d'utiliser django-cors-middleware pour autoriser le partage de ressources d'origines croisées dans mon API Django hébergée sur Heroku. J'ai suivi la configuration spécifiée dans mon settings.py, à savoir:Activer CORS dans l'application Django sur Heroku

INSTALLED_APPS = [ 
    ... 
    'corsheaders', 
] 

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'corsheaders.middleware.CorsMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

CORS_ORIGIN_ALLOW_ALL = True 
CORS_ALLOW_CREDENTIALS = True 

(je montre 'django.middleware.clickjacking.XFrameOptionsMiddleware' parce que je lis dans un autre poste que SO django-cors-middleware ne fonctionne pas avec clickjacking middleware, mais il ne semble pas fonctionner soit chemin.)

J'utilise https://resttesttest.com pour tester. Lorsque je fais la demande, il crache: Oh no! Javascript returned an HTTP 0 error. One common reason this might happen is that you requested a cross-domain resource from a server that did not include the appropriate CORS headers in the response

+0

pouvez-vous tout code complet pour MIDDLEWARE_CLASSES ... pour des questions de middleware. Vous voulez voir où vous avez CorsMiddleware –

+0

@ChirdeepTomar Edited. – cph2117

+1

Tout semble bien ... pouvez-vous essayer avec un fichier javascript local. –

Répondre

0

@ChirdeepTomar, oui cela a fonctionné lors du test en local. Je ne sais pas pourquoi cela n'a pas fonctionné avec resttesttest.com. Il y a une applet fantastique pour tester CORS localement que j'ai trouvé here, et ont reproduit ci-dessous pour plus de commodité:

<html> 
<head>  
<title>Test for CORS</title>  
<script type="text/javascript"> 
function testcors(url){    
    var createCORSRequest = function(method, url) {     
     var xhr = new XMLHttpRequest();     
     if ("withCredentials" in xhr) {      
      xhr.open(method, url, true);     
     } 
     else if (typeof XDomainRequest != "undefined") {          
      xhr = new XDomainRequest();      
      xhr.open(method, url);     
     } 
     else {           
      xhr = null;     
     }     
     return xhr;    
    };    
    var method = 'GET';    
    var xhr = createCORSRequest(method, url);    
    xhr.onload = function() {        
     thendothis(true); //success    
    };    
    xhr.onerror = function() {     // Error code goes here.     
     thendothis(false);    
    };    
    xhr.send();    
    return iscors;   
}   
function thendothis(iscors){    
    var resptxt = "No";    
    if (iscors) { resptxt = "Yes"; }    
    document.getElementById("res").innerHTML = resptxt;   
}   
function runtest(frm){    
    testcors(frm.url.value);   
}  
</script> 
</head> 
<body>  
    <form>   
     URL: <input type="text" name="url" id="url" style="width:500px" /></br>   
     <input type="button" value="Test if CORS" onclick="runtest(this.form)" />  
    </form>  
    <div>URL is CORS: <span id="res"></span></div> 
</body> 
</html>