Mod_wsgi и Apache. Где требуется Access-Control-Allow-Origin?

Я отправляю данные через JS на сервер apache2, работающий на mod_wsgi через:

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

Если файл .wsgi, который я отправляю, выглядит следующим образом:

 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 

Когда я пытаюсь сохранить, используя что-то вроде f = open (), или когда я пытаюсь получить доступ к базе данных 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 

Я получил No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. XMLHttpRequest Error> No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Я попробовал добавить Header set Access-Control-Allow-Origin "*" на httpd.conf, а также в основную конфигурацию Apache, но это не сработало. Я всегда пытался добавить ('Access-Control-Allow-Origin','*') в response_headers .

Как (и где) включить enable-control-allow-origin, чтобы я мог получить доступ к базе данных sqlite или написать что-то, используя f = open ().

edit: Мой файл 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> 

И мой 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 

С помощью Грэма Дамплтона мне удалось получить ответ.

Я загружал модуль в httpd.conf и в /mods-available/wsgi.load, что приводило к странному поведению.

Удаление LoadModule wsgi_module modules/mod_wsgi.so-2.7 из httpd.conf заставило модуль загружаться правильно. Затем header был загружен из httpd.conf

изменить: добавленные комментарии

Interesting Posts