我正在使用fs.inotify.max_user_watches=1048576
仅允许从多个域访问我的网络服务。但它不能正常工作。让我解释一下。
看看我的意识:
Falcon CORS
所以,当我向我的API服务发出任何帖子请求时,我会收到日志警告:
ALLOWED_ORIGINS = ['*']
crossdomain_origin = CORS(allow_origins_list=[ALLOWED_ORIGINS], log_level='DEBUG')
app = falcon.API(middleware=[RequireJSON(), JSONTranslator(), cors.middleware])
。但是我从我的API得到了正确的答案。
以下是有关此模块的官方文档:https://github.com/lwcolton/falcon-cors
答案 0 :(得分:4)
我尝试按照向导by lwcolton on github here
还要设置allow_all_headers
= True,allow_all_methods
= True
即与@Ryan comment
相同from falcon_cors import CORS
cors = CORS(
allow_all_origins=True,
allow_all_headers=True,
allow_all_methods=True,
)
api = falcon.API(middleware=[cors.middleware])
答案 1 :(得分:1)
您的代码与falcon-cors文档的示例不匹配:
import falcon
from falcon_cors import CORS
cors = CORS(allow_origins_list=['http://test.com:8080'])
api = falcon.API(middleware=[cors.middleware])
# ^^^^^^^^^^^^^^^
注意cors.middleware
变量正在传递给api调用。在您的代码中,您创建了crossdomain_origin
但未将其传递到API设置中。
如果这不能解决问题,请提供一个易于测试和复制的工作代码示例,包括Falcon资源类,我很乐意尝试提供帮助。
编辑:
从下面的评论中,听起来像猎鹰队员正常工作,而问题可能是origin
标题被从请求中删除。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Origin标头指示跨站点访问请求或预检请求的来源。
答案 2 :(得分:0)
旁注:
原点'*'在某些浏览器上不起作用..尤其是IE。过去,我必须将ORIGIN标头动态设置为HTTP标头中请求的“主机”名称,以便为我设置的站点支持通配域主机。
答案 3 :(得分:0)
还有另一种无需使用falcon-cors
即可实现的方法您可能要在官方文档中查看-how-do-i-implement-cors-with-falcon
class CORSComponent:
def process_response(self, req, resp, resource, req_succeeded):
resp.set_header('Access-Control-Allow-Origin', '*')
if (req_succeeded
and req.method == 'OPTIONS'
and req.get_header('Access-Control-Request-Method')
):
# NOTE: This is a CORS preflight request. Patch the
# response accordingly.
allow = resp.get_header('Allow')
resp.delete_header('Allow')
allow_headers = req.get_header(
'Access-Control-Request-Headers',
default='*'
)
resp.set_headers((
('Access-Control-Allow-Methods', allow),
('Access-Control-Allow-Headers', allow_headers),
('Access-Control-Max-Age', '86400'), # 24 hours
))
使用上述方法时,在用于身份验证,内容协商等的任何其他中间件或挂钩中,OPTIONS请求也必须进行特殊区分。例如,由于不必要,通常会跳过身份验证以进行预检请求;请注意,无论如何,此类请求均不包含Authorization标头。
您现在可以将其放入中间件
api = falcon.API(middleware=[
CORSComponent()
])