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
Montrez votre configuration mod_wsgi à partir du fichier de configuration d'Apache peut donc voir où vous avez spécifié '' directive Header''. –
@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. –
Suis surpris Apache ne donne pas d'erreur au démarrage, car '' LoadModule'' ne peut être utilisé nulle part dans un '' VirtualHost''. –