python - Content-Type header not getting set in Tornado -


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.

firefox developer tools

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 different content-type, call set_header after calling write()).


Comments