提供跨源资源共享、访问控制、支持的quart扩展。

Quart-CORS的Python项目详细描述


Build Statuspypipythonlicense

quart cors是Quart的扩展,用于启用和控制Cross Origin Resource Sharing,cors 称为访问控制)。

由于Same Origin Policy,cors需要在浏览器中共享资源 防止资源从不同来源被使用。起源 在这种情况下,定义为方案、主机和端口的组合以及 资源对应于路径。

实际上,同源策略意味着浏览器访问 http://quart.com将阻止读取GET http://api.com的响应。它还将阻止诸如 POST http://api.com。注意,cors适用于浏览器启动的 请求、非浏览器客户端(如requests)不受 CORS限制。

cors允许服务器向浏览器指示某些资源 可以使用,与同源策略相反。它是通过 通知浏览器资源的访问控制头 使用。对于get请求,这些头将在响应中发送。为了 非get请求浏览器必须向服务器请求 在发送实际请求之前,它会这样做 通过飞行前选项请求。

同源策略不适用于WebSocket,因此 不需要穿紧身衣。相反,只有服务器负责 决定是否允许websocket,它应该通过检查 WebSocket请求源头。

简单(get)请求应返回cors头,指定 允许使用资源(响应)的源。这可能是 任何原点,*(通配符)或特定原点列表。这个 响应还应该包含一个cors头,指定 可以使用响应凭据,例如cookies。注意,如果凭证 允许共享允许的源必须是特定的而不是 通配符。

飞行前请求应返回指定原点的CORS头 允许使用资源,允许 向资源发送请求,是否可以 已使用,最后是可以使用的响应头。

请注意,在同一来源策略中允许某些操作,例如 例如<img src="http://api.com/img.gif">和simple 帖子。在本自述文件中,尽管这些复杂情况 忽略。

CORS访问控制响应头是,

Header nameMeaning
Access-Control-Allow-OriginOrigins that are allowed to use the resource.
Access-Control-Allow-CredentialsCan credentials be shared.
Access-Control-Allow-MethodsMethods that may be used in requests to the resource.
Access-Control-Allow-HeadersHeaders that may be sent in requests to the resource.
Access-Control-Expose-HeadersHeaders that may be read in the response from the resource.
Access-Control-Max-AgeMaximum age to cache the CORS headers for the resource.

quart cors使用相同的命名(没有访问控制前缀) 因为当它们与同一个意义相关时,它是参数和设置。

用法

将cors访问控制头添加到 应用程序,只需对应用程序应用cors函数,或者 对于特定的蓝图,

app=Quart(__name__)app=cors(app,**settings)blueprint=Blueprint(__name__)blueprint=cors(blueprint,**settings)

或者,如果您希望按资源选择性地添加cors,请应用 路由的route_cors函数,或websocket_cors 函数指向WebSocket,

@app.route('/')@route_cors(**settings)asyncdefhandler():...@app.websocket('/')@websocket_cors(allow_origin=...)asyncdefhandler():...

settings是这些参数,

Argumenttype
allow_originUnion[Set[str], str]
allow_credentialsbool
allow_methodsUnion[Set[str], str]
allow_headersUnion[Set[str], str]
expose_headersUnion[Set[str], str]
max_ageUnion[int, flot, timedelta]

与上面提到的CORS标题相对应。请注意 设置是可选的,可以在应用程序中指定默认值 配置,

Configuration keytype
QUART_CORS_ALLOW_ORIGINSet[str]
QUART_CORS_ALLOW_CREDENTIALSbool
QUART_CORS_ALLOW_METHODSSet[str]
QUART_CORS_ALLOW_HEADERSSet[str]
QUART_CORS_EXPOSE_HEADERSSet[str]
QUART_CORS_MAX_AGEfloat

websocket_corsdecorator只接受allow_origin 定义允许使用 韦博塞特。来自不允许来源的WebSocket请求将是 回复400。

简单示例

允许从任何来源使用应用程序(不推荐,因为它是 太宽容了),

app=Quart(__name__)app=cors(app,allow_origin="*")

要允许从另一个特定域使用路由或WebSocket, https://quart.com

@app.route('/')@route_cors(allow_origin="https://quart.com")asyncdefhandler():...@app.websocket('/')@websocket_cors(allow_origin="https://quart.com")asyncdefhandler():...

允许json post请求到api路由,从https://quart.com

@app.route('/',methods=["POST"])@route_cors(allow_headers=["content-type"],allow_methods=["POST"],allow_origin=["https://quart.com"],)asyncdefhandler():data=awaitrequest.get_json()...

贡献

夸脱cors是在GitLab上开发的。很欢迎你来 打开issues或 提议merge requests

测试

测试夸脱cors的最佳方法是使用tox,

$ pip install tox
$ tox

这将检查代码样式并运行测试。

帮助

这个自述文件是最好的开始,之后尝试打开 issue

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用ApachePOI将excel文件导入postgreSQL表   java多线程从iText pdf提取文本   winapi Java和SetWindowDisplayAffinity   eclipse juno的java Websphere 6.1插件   java MPAndroidChart:为Y轴提供一些偏移   java中作为参数传递枚举类型的继承   java Gui jframe的工作原理与netbeans不同   使用Bouncy Castle和PDFBox在Java中验证PDF签名   优化缩小Java代码   java无法在安卓中从Firebase取回子数据   返回的java方法?我应该什么时候用?   java错误处理已完成,退出代码为1。与穿过阵列的for循环有关   多线程Java volatile是否阻止缓存或强制执行写缓存?   java Multi-collectItems如何提前终止并返回已收集的项目   java为什么不在服务(请求,响应)中直接调用processRequest(请求,响应)?   java如何从字符串生成int数组?   打印获取用户输入的值并在其他预选文本中显示。JAVA   未显示java DynamicAsper UTF8字符   java Eclipse RCP:不启动应用程序的命令行参数