簡體   English   中英

在Tornado中未設置Content-Type標頭

[英]Content-Type header not getting set in Tornado

我有以下基類:

class CorsHandler(tornado.web.RequestHandler):

    def set_default_headers(self):
        super(CorsHandler, self).set_default_headers()

        self.set_header('Access-Control-Allow-Origin', self.request.headers.get('Origin', '*'))
        self.set_header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS')
        self.set_header('Access-Control-Allow-Credentials', 'true')
        self.set_header('Access-Control-Allow-Headers', ','.join(
            self.request.headers.get('Access-Control-Request-Headers', '').split(',') +
            ['Content-Type']
        ))

        self.set_header('Content-Type', 'application/json')

    def options(self, *args, **kwargs):
        pass

以下處理程序:

def get(self, resource_id=None, field=None):
    try:
        if resource_id is None:
            response = self.resource.query.filter_by(is_deleted=False).all()

        else:
            record = self.resource.query.get(int(resource_id))

            if field is None:
                response = record
            else:
                response = {field: getattr(record, field)}

        self.db.session.commit()

    except Exception, e:
        self.db.session.rollback()

        self.send_error(500, message=e.message)

    self.write(response)

一切都很簡單,除了Content-Type沒有設置。 請注意,正確設置了任何其他標頭。

Firefox開發者工具

這是怎么回事?

看來這是一個304 Not Modified響應。 請記住,只有前200 OK響應包含Content-Type標頭。 如果您請求相同的資源,以下響應將忽略此標頭。

請注意,您實際上並不需要顯式設置Content-Type 如果你查看Tornado的源代碼,你會在write(self, chunk)的注釋中找到它:

如果給定的塊是字典,我們將其寫為JSON並將響應的Content-Type設置為application/json (如果要將JSON作為不同的Content-Type ,請調用write() 之后調用set_header)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM