Flask RESTful Angular跨域问题:PUT,OPTIONS方法

我用Flask Restful开发了一个小型的只写REST

api,该API接受来自少数可能具有更改IP地址的客户端的PUT请求。我的客户是运行AngularJS前端的嵌入式Chromium客户。他们使用一个简单的魔术密钥通过我的API进行身份验证-

这对于我非常有限的规模就足够了。

我正在测试部署我的API的过程,并且我注意到Angular客户端正在尝试向我的Flask服务发送OPTIONS

http方法。同时,我的API使用404进行答复(因为我还没有编写OPTIONS处理程序,所以只编写了PUT处理程序)。似乎在发送非POST或GET的跨域请求时,Angular会在服务器上发送预检OPTIONS方法,以确保在发送实际请求之前跨域请求已被接受。那正确吗?

无论如何,如何允许所有跨域PUT请求到Flask Restful

API?之前,我曾将跨空间装饰器与(非静态的)Flask实例一起使用,但是我是否还需要在我的API中编写一个OPTIONS处理程序?

回答:

我通过重写Flask后端以在我的PUT响应中使用Access-Control-Allow-

Origin标头进行回答来解决了该问题。此外,我在Flask应用程序中创建了一个OPTIONS处理程序,通过遵循我在http

RFC中阅读的内容来回答options方法。

PUT方法的返回看起来像这样:

return restful.request.form, 201, {'Access-Control-Allow-Origin': '*'}

我的OPTIONS方法处理程序如下所示:

def options (self):

return {'Allow' : 'PUT' }, 200, \

{ 'Access-Control-Allow-Origin': '*', \

'Access-Control-Allow-Methods' : 'PUT,GET' }

@tbicr是正确的:Flask会自动为您回答OPTIONS方法。但是,在我的情况下,它没有传输带有该答案的Access-Control-Allow-

Origin标头,因此我的浏览器从api得到了答复,这似乎暗示着不允许跨域请求。在我的情况下,我超载了选项请求,并添加了ACAO标头,浏览器似乎对此感到满意,并在OPTIONS中使用了一个PUT,该方法也有效。

以上是 Flask RESTful Angular跨域问题:PUT,OPTIONS方法 的全部内容, 来源链接: utcz.com/qa/416679.html

回到顶部