programing

Flask에서 응답 헤더를 어떻게 설정하나요?

nasanasas 2020. 10. 8. 08:04
반응형

Flask에서 응답 헤더를 어떻게 설정하나요?


이것은 내 코드입니다.

@app.route('/hello', methods=["POST"])
def hello():
    resp = make_response()
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

그러나 브라우저에서 서버로 요청하면이 오류가 발생합니다.

XMLHttpRequest cannot load http://localhost:5000/hello. 
No 'Access-Control-Allow-Origin' header is present on the requested resource.

또한 요청 "후"응답 헤더를 설정하여이 접근 방식을 시도했습니다.

@app.after_request
def add_header(response):
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response

주사위가 없습니다. 같은 오류가 발생합니다. 경로 함수에서 응답 헤더를 설정하는 방법이 있습니까? 다음과 같은 것이 이상적입니다.

@app.route('/hello', methods=["POST"])
    def hello(response): # is this a thing??
        response.headers['Access-Control-Allow-Origin'] = '*'
        return response

그러나 어쨌든 나는 이것을 할 수 없습니다. 도와주세요.

편집하다

다음과 같이 POST 요청으로 URL을 컬링하면

curl -iX POST http://localhost:5000/hello

이 응답을받습니다.

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>

어떤 아이디어?


이것은 매우 쉽게 할 수 있습니다.

@app.route("/")
def home():
    resp = flask.Response("Foo bar baz")
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

flask.Responseflask.make_response ()를 보세요.

그러나 다른 문제가 있다는 것을 알려주는 이유는에서 after_request올바르게 처리해야 했기 때문 입니다.

편집
나는 당신이 이미 make_response그것을하는 방법 중 하나를 사용 하고 있음을 알았 습니다. 이전에 말했듯이 after_request잘 작동 했어야했습니다. curl을 통해 끝점을 치고 헤더가 무엇인지 확인하십시오.

curl -i http://127.0.0.1:5000/your/endpoint

넌 봐야 해

> curl -i 'http://127.0.0.1:5000/'
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 11
Access-Control-Allow-Origin: *
Server: Werkzeug/0.8.3 Python/2.7.5
Date: Tue, 16 Sep 2014 03:47:13 GMT

Access-Control-Allow-Origin 헤더에 주목하십시오.

편집 2
내가 생각했듯이 500을 얻고 있으므로 생각한 것처럼 헤더를 설정하지 않습니다. app.debug = True앱을 시작하기 전에 추가 하고 다시 시도하십시오. 문제의 근본 원인을 보여주는 출력이 표시되어야합니다.

예를 들면 :

@app.route("/")
def home():
    resp = flask.Response("Foo bar baz")
    user.weapon = boomerang
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

멋지게 형식이 지정된 html 오류 페이지를 제공합니다.이 페이지는 맨 아래에 있습니다 (컬 명령에 유용함).

Traceback (most recent call last):
...
  File "/private/tmp/min.py", line 8, in home
    user.weapon = boomerang
NameError: global name 'boomerang' is not defined

make_response다음과 같은 Flask 사용

@app.route("/")
def home():
    resp = make_response("hello") #here you could use make_response(render_template(...)) too
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

에서 플라스크 문서 ,

flask.make_response (* args)

Sometimes it is necessary to set additional headers in a view. Because views do not have to return response objects but can return a value that is converted into a response object by Flask itself, it becomes tricky to add headers to it. This function can be called instead of using a return and you will get a response object which you can use to attach headers.


This work for me

from flask import Flask
from flask import Response

app = Flask(__name__)

@app.route("/")
def home():
    return Response(headers={'Access-Control-Allow-Origin':'*'})

if __name__ == "__main__":
    app.run()

참고URL : https://stackoverflow.com/questions/25860304/how-do-i-set-response-headers-in-flask

반응형