Skip to content

Instantly share code, notes, and snippets.

@espretto
Created April 28, 2017 18:45
Show Gist options
  • Save espretto/919a64d6a48e06da0fcf26ea70a50a93 to your computer and use it in GitHub Desktop.
Save espretto/919a64d6a48e06da0fcf26ea70a50a93 to your computer and use it in GitHub Desktop.
cors middleware for asyncio
from aiohttp import web
web.Application(middlewares=[cors_factory])
ALLOWED_HEADERS = ','.join((
'content-type',
'accept',
'origin',
'authorization',
'x-requested-with',
'x-csrftoken',
))
def set_cors_headers (request, response):
response.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin', '*')
response.headers['Access-Control-Allow-Methods'] = request.method
response.headers['Access-Control-Allow-Headers'] = ALLOWED_HEADERS
response.headers['Access-Control-Allow-Credentials'] = 'true'
return response
@asyncio.coroutine
def cors_factory (app, handler):
@asyncio.coroutine
def cors_handler (request):
# preflight requests
if request.method == 'OPTIONS':
return set_cors_headers(request, web.Response())
else:
response = yield from handler(request)
return set_cors_headers(request, response)
return cors_handler
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment