Where is the correct place to enable CORS?

后端 未结 2 1224
庸人自扰
庸人自扰 2021-01-25 03:03

I\'m using Spyne (the example \"hello world\" code) to make a webservice that produces some json data and then I\'m trying to consume this data in javascript code i

相关标签:
2条回答
  • 2021-01-25 03:31

    You need add this as the first line of your service implementation:

    ctx.transport.resp_headers['Access-Control-Allow-Origin'] = '*'
    

    However, that can get very annoying very fast, so here's a way to properly implement it:

    class CorsService(ServiceBase):
        origin = '*'
    
    def _on_method_return_object(ctx):
        ctx.transport.resp_headers['Access-Control-Allow-Origin'] = \
                                                  ctx.descriptor.service_class.origin
    
    CorsService.event_manager.add_listener('method_return_object', 
                                                            _on_method_return_object)
    

    So instead of using ServiceBase, you can now use CorsService as parent class to your services to get the CORS header automatically.

    Also note that it's more secure to set the header value only to the domain that hosts the Spyne service instead of using a wildcard.

    0 讨论(0)
  • 2021-01-25 03:35

    No need to add any client side code.

    You simply need to add the following to the header of the response sent by the server:

    Access-Control-Allow-Origin: *

    See http://enable-cors.org/server.html for more info for the various server setups. Not familiar with Spyne but this may help

    http://spyne.io/docs/2.10/manual/06_metadata.html#protocol-headers

    0 讨论(0)
提交回复
热议问题