Flask-Restless を使用して作成され、Apache を使用して提供される postgres データベース用の API があります。
OPTIONS リクエストに密接に関連していると思われる複数の「CORS Error Access-Control-Allow-Origin」ヘッダーを受け取ったときに、javascript ベースのフロントエンドを使用して API にアクセスしようとするまで、API は完全に機能します。
次の修正を試みました
[1.Apacheでcorsを有効にする][1]
<VirtualHost *:80>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type, Authorization"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
ServerName localhost
WSGIScriptAlias / /home/drmclean/bboxx/git/Smart-Solar-Server/SmartSolarServer.wsgi
WSGIScriptReloading On
<Directory /home/drmclean/bboxx/git/Smart-Solar-Server/>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type, Authorization"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Require all granted
Order allow,deny
Allow from all
</Directory>
Alias /docs /home/drmclean/bboxx/git/Smart-Solar-Server/swagger
<Directory /home/drmclean/bboxx/git/Smart-Solar-Server/swagger/>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type, Authorization"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Require all granted
Header set Access-Control-Allow-Origin "*"
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
<IfModule mod_rewrite.c>
RewriteEngine on
# Pass Authorization headers to an environment variable
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
2.flask-cors 拡張機能を使用して CORS を有効にします。
app = Flask(__name__, static_folder= paths.base_path+'/swagger/')
cors = CORS(app)
3.フラスコレストレスを使用してCORSを有効にします
def allow_control_headers(response):
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Credentials'] = 'true'
return response
bp = manager.create_api(REDACTED)
bp.after_request(allow_control_headers)
言うまでもなく、これまでに機能したものはありません。
- CORS 警告は削除されません。
- これを cors = CORS(app, response=r"/v1/*") に変更すると、最初に削除された CORS エラーが返されました。
- ドキュメントから直接構文をコピーしたにもかかわらず、「bp has no attribute after_request」という構文エラーがスローされました。(ここ)
誰でも説明できますか、
- 上記の修正で CORS の問題が解決されなかった理由。
- 問題を解決し、Cross-Origin-Resource-SHAring を効果的に有効にする方法は?