i have following base class:
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
and following handler:
def get(self, resource_id=none, field=none): try: if resource_id none: response = self.resource.query.filter_by(is_deleted=false).all() else: record = self.resource.query.get(int(resource_id)) if field 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)
everything's pretty straightforward, except content-type not getting set. note other header being set properly.
what's going on?
it seems 304 not modified
response. remember first 200 ok
response contains content-type
header. following response neglect header if requesting same resource.
and beware don't need explicitly set content-type
. if source code of tornado, find in comment of write(self, chunk)
:
if given chunk dictionary, write json , set content-type of response
application/json
. (if want send json differentcontent-type
, call set_header after calling write()).
Comments
Post a Comment