2017-05-15 4 views
0

J'envoie des données via JS à mon serveur apache2 en cours d'exécution mod_wsgi via:Mod_wsgi et Apache. Où Access-Control-Allow-Origin est-il nécessaire?

$.ajax({ 
     method: "POST", 
     url: "https://annotatie01.io.tudelft.nl/app", 
     data: "test-data", 
     success: function(response) { 
      console.log(response) 
     } 
    }); 

Si le fichier .wsgi j'envoie à est la suivante, cela fonctionne:

def application(environ, start_response): 
    status = '200 OK' 

    length = int(environ.get('CONTENT_LENGTH', '0')) 
    data = environ['wsgi.input'].read(length) 

    response_headers = [('Content-type', '*'), 
         ('Content-Length', str(len(data)))] 
    start_response(status, response_headers) 

    return data 

Quand je essayer de sauver en utilisant quelque chose comme f = open(), ou lorsque je tente d'accéder à une base de données SQL:

import sqlite3 

def application(environ, start_response): 
    status = '200 OK' 

    length = int(environ.get('CONTENT_LENGTH', '0')) 
    data = environ['wsgi.input'].read(length) 

    conn = sqlite3.connect('/var/database/material3.db') 
    c = conn.cursor() 
    c.execute('SELECT image from image_table limit 1') 
    data = c.fetchall() 

    response_headers = [('Content-type', '*'), 
         ('Content-Length', str(len(data)))] 
    start_response(status, response_headers) 

    return data 

Je reçois une erreur XMLHttpRequest>No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

J'ai essayé d'ajouter Header set Access-Control-Allow-Origin "*" au fichier httpd.conf, ainsi qu'à la configuration principale d'Apache, mais cela n'a pas fonctionné. J'ai toujours essayé d'ajouter ('Access-Control-Allow-Origin','*') au response_headers. Comment puis-je activer access-control-allow-origin, pour pouvoir accéder à la base de données sqlite ou écrire quelque chose en utilisant f = open().

modifier: Mon fichier httpd.conf.

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "*" 
    </IfModule> 

<VirtualHost *:443> 
     Header set Access-Control-Allow-Origin "*" 
     ServerName annotatie01.io.tudelft.nl:443 
     SSLEngine on 

     SSLCertificateFile  /var/www/experiment/CSR/annotatie01_io_tudelft_nl.crt 
     SSLCertificateKeyFile /var/www/experiment/CSR/annotatie01_io_tudelft_nl.key 

     WSGIScriptAlias /app /var/www/experiment/experiment/py/mod_wsgi-test/myapp.wsgi 
     DocumentRoot /var/www 
     <Directory /> 
      Options FollowSymLinks 
      AllowOverride None 
     </Directory> 
     <Directory /var/www/> 
      Header set Access-Control-Allow-Origin "*" 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride None 
      Order allow,deny 
      allow from all 
      LoadModule wsgi_module modules/mod_wsgi.so-2.7 
     </Directory>  
</VirtualHost> 


<VirtualHost *:80> 
     Header set Access-Control-Allow-Origin "*" 
     DocumentRoot /data_nfs/www 
     <Directory /> 
      Options FollowSymLinks 
      AllowOverride None 
     </Directory> 
     <Directory /data_nfs/www> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride None 
      Order allow,deny 
      allow from all 
     </Directory> 
</VirtualHost> 

Et mon apache2.conf:

SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL 
SSLProtocol TLSv1 
Mutex file:${APACHE_LOCK_DIR} default 
PidFile ${APACHE_PID_FILE} 
Timeout 300 
KeepAlive On 
MaxKeepAliveRequests 100 
KeepAliveTimeout 5 
User ${APACHE_RUN_USER} 
Group ${APACHE_RUN_GROUP} 
HostnameLookups Off 
ErrorLog ${APACHE_LOG_DIR}/error.log 
LogLevel warn 
IncludeOptional mods-enabled/*.load 
IncludeOptional mods-enabled/*.conf 
Include ports.conf 
<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride None 
     Require all granted 
</Directory> 
AccessFileName .htaccess 
<FilesMatch "^\.ht"> 
     Require all denied 
</FilesMatch> 
Header set Access-Control-Allow-Origin "*" 
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "%h %l %u %t \"%r\" %>s %O" common 
LogFormat "%{Referer}i -> %U" referer 
LogFormat "%{User-agent}i" agent 
IncludeOptional conf-enabled/*.conf 
Include /etc/apache2/httpd.conf 
+0

Montrez votre configuration mod_wsgi à partir du fichier de configuration d'Apache peut donc voir où vous avez spécifié '' directive Header''. –

+0

@GrahamDumpleton J'ai ajouté le fichier httpd.conf. Je crois que c'est le fichier dont vous parlez aussi. Comme vous pouvez le voir, je n'étais pas sûr de l'endroit où le placer. –

+0

Suis surpris Apache ne donne pas d'erreur au démarrage, car '' LoadModule'' ne peut être utilisé nulle part dans un '' VirtualHost''. –

Répondre

1

Avec l'aide de Graham Dumpleton, j'ai réussi à obtenir la réponse.

Je chargeais tous deux le module dans httpd.conf, et dans /mods-available/wsgi.load, ce qui conduisait à un comportement étrange. La suppression de LoadModule wsgi_module modules/mod_wsgi.so-2.7 du fichier httpd.conf a entraîné le chargement correct du module. Puis le header a été chargé de la httpd.conf

modifier: commentaires Ajout d'information

+0

Comme cela n'a rien à voir avec le module mod_wsgi, vous n'ajouteriez généralement pas la directive '' Header'' à '' wsgi.load''. Vous gardez cela dans le '' VirtualHost''. –