aiohttp服务器上最粗糙的CORS支持方法


对于使用aiohttp Server实现API服务器时对CORS 的支持,aiohttp正式提供了一个名为aiohttp_cors的模块。

但是,当我阅读《用法》时,这似乎并不简单,因为有必要用cors.add包装每个资源和每个路由。进行详细设置很方便,但是在某些情况下,"我只想允许所有请求"。

因此,这一次,我将撰写有关如何在不使用aiohttp_cors的情况下大致支持CORS的文章。

1
2
3
4
5
6
7
8
9
from aiohttp import web

@web.middleware
async def cors_middleware(request, handler):
    response = await handler(request)
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response

app = web.Application(middlewares=[cors_middleware])

结束了。

只需将Access-Control-Allow-Origin: *标头添加到每个响应。

如果您说" *怎么样?",那么能够指定环境变量中允许的Origin会很好。

1
2
3
4
5
6
7
8
9
10
import os
from aiohttp import web

@web.middleware
async def cors_middleware(request, handler):
    response = await handler(request)
    response.headers['Access-Control-Allow-Origin'] = os.environ.get('CORS_ALLOW_ORIGIN', '*')
    return response

app = web.Application(middlewares=[cors_middleware])

顺便说一句,它与预检请求飞行的情况不对应。
如果您想响应,请提出一个好的请求以返回所有OPTION请求。

这是一个非常粗糙的故事,所以请考虑是否可以用于安全性或其他方面。

  • 跨域资源共享(CORS)--HTTP | MDN?