Voici mon code:
@app.route('/hello', methods=["POST"])
def hello():
resp = make_response()
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
Cependant, lorsque je fais une demande du navigateur à mon serveur, j'obtiens cette erreur:
XMLHttpRequest cannot load http://localhost:5000/hello.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
J'ai également essayé cette approche, en définissant les en-têtes de réponse "après" la requête:
@app.after_request
def add_header(response):
response.headers['Access-Control-Allow-Origin'] = '*'
return response
Pas de dé. J'ai la même erreur. Existe-t-il un moyen de définir simplement les en-têtes de réponse dans la fonction d'itinéraire? Quelque chose comme ça serait idéal:
@app.route('/hello', methods=["POST"])
def hello(response): # is this a thing??
response.headers['Access-Control-Allow-Origin'] = '*'
return response
mais je ne peux pas trouver de toute façon faire cela. Veuillez aider.
ÉDITER
si je curl l'url avec une requête POST comme ceci:
curl -iX POST http://localhost:5000/hello
J'obtiens cette réponse:
HTTP/1.0 500 INTERNAL SERVER ERROR
Content-Type: text/html
Content-Length: 291
Server: Werkzeug/0.9.6 Python/2.7.6
Date: Tue, 16 Sep 2014 03:58:42 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
Des idées?
Ce travail pour moi
la source
return Response(headers={'Access-Control-Allow-Origin':'*'})
qui me paraît plus propre.C'est ainsi que j'ai ajouté mes en-têtes dans mon application flask et cela a parfaitement fonctionné
la source
Nous pouvons définir les en-têtes de réponse dans l'application Python Flask à l'aide du contexte d'application Flask en utilisant
flask.g
Cette façon de définir les en-têtes de réponse dans le contexte d'application Flask à l'aide
flask.g
est thread-safe et peut être utilisée pour définir des attributs personnalisés et dynamiques à partir de n'importe quel fichier d'application, cela est particulièrement utile si nous définissons des en-têtes de réponse personnalisés / dynamiques à partir de n'importe quelle classe d'assistance, qui peut également accessible à partir de tout autre fichier (par exemple, middleware, etc.),flask.g
c'est global et valide pour ce thread de requête uniquement.Dites si je veux lire l'en-tête de réponse d'un autre appel api / http qui est appelé à partir de cette application, puis extrayez-le et définissez-le comme en-tête de réponse pour cette application.
Exemple de code: fichier:
helper.py
fichier:
middleware.py
Appel du middleware depuis la classe principale
fichier :
main.py
la source