当前位置: 首页 > 面试题库 >

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

钱锐
2023-03-14
问题内容

我用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,该方法也有效。



 类似资料:
  • 平时被问到最多的问题还是关于跨域的,其实跨域问题真的不是一个很难解决的问题。这里我来简单总结一下我推荐的几种跨域解决方案。 我最推荐的也是我工作中在使用的方式就是: cors 全称为 Cross Origin Resource Sharing(跨域资源共享)。这种方案对于前端来说没有什么工作量,和正常发送请求写法上没有任何区别,工作量基本都在后端这里。每一次请求,浏览器必须先以 OPTIONS 请

  • imi 框架内置了一个 OptionsMiddleware 中间件,用于解决使用 application/json 请求时,浏览器会先发送一个 OPTIONS 请求。并且可以解决跨域头问题。 类名:\Imi\Server\Http\Middleware\OptionsMiddleware 别名:OptionsMiddleware 中间件使用方法:https://doc.imiphp.com/com

  • 问题内容: 可以说,我有一个名为example.com的网站,在该网站上嵌入了iframe.net域的iframe,现在我想读取iframe的内容并传递一些参数以显示文本消息。像Hi和用户名一样。 现在的问题是,这无法在两者之间建立连接,甚至无法获得我使用以下方法使用的iframe的innerHTML 它将引发错误“权限被拒绝访问属性” 有谁知道如何在跨域平台中读写 问题答案: 如果您无法控制框架

  • 问题内容: 我正在尝试访问另一个域中的Web服务,但它不返回任何内容。后来我发现这是一个跨域访问的问题。 我在网上搜索了很多文章,但像我这样的新手都看不懂。:( 有人可以帮助我如何访问Web服务吗? 以下是我的代码。 问题答案: 浏览器不允许跨域AJAX调用。仅允许跨域JSONP请求。 要使用JSONP请求,您必须将属性更改为。但是,这意味着您不能请求XML,而只能请求JSONP。 关于JSONP

  • cors套件 https://github.com/evert0n/koa-cors https://github.com/expressjs/cors 使用nginx nginx 前端:moa-frontend public下面的采用nginx做反向代理 其他的采用express+jade精简代码(ajax与后端交互) 后端 server { listen 8

  • 问题内容: 可以说,我有一个名为example.com的网站,在该网站上嵌入了iframe.net域的iframe,现在我想读取iframe的内容并传递一些参数以显示文本消息。像Hi和用户名一样。 现在的问题是,这无法在两者之间建立连接,甚至无法获得我使用以下方法使用的iframe的innerHTML 它将引发错误“权限被拒绝访问属性” 有谁知道如何在跨域平台中读写 问题答案: 如果您无法控制框架