未使用Actix_Web服务器以Rust编写的Actix_Cors设置Cors标头

未使用Actix_Web服务器以Rust编写的Actix_Cors设置Cors标头,rust,cors,actix-web,rust-actix,Rust,Cors,Actix Web,Rust Actix,我已经用Actix_web编写了一个Rust中的web服务器。我正在为生产做准备,所以我想向服务器添加COR以提高安全性。我使用Actix_Cors包来实现这一点,并用一个基本服务器实现了一个测试。然而,当调用端点时,没有设置Cors头,服务器接受来自任何客户端的连接,即使我已经将其限制在一个不应该工作的域中。我不确定这为什么不起作用,我已经尽我所能对它进行了调试。我严格按照Actix Cors文档中的说明设置服务器。有人能帮我弄清楚为什么它不起作用吗 主要功能: 使用actix_cors::c

我已经用Actix_web编写了一个Rust中的web服务器。我正在为生产做准备,所以我想向服务器添加COR以提高安全性。我使用Actix_Cors包来实现这一点,并用一个基本服务器实现了一个测试。然而,当调用端点时,没有设置Cors头,服务器接受来自任何客户端的连接,即使我已经将其限制在一个不应该工作的域中。我不确定这为什么不起作用,我已经尽我所能对它进行了调试。我严格按照Actix Cors文档中的说明设置服务器。有人能帮我弄清楚为什么它不起作用吗

主要功能:

使用actix_cors::cors;
使用actix_web:{get,http,web,App,HttpRequest,HttpResponse,HttpServer};
#[获取(“/index.html”)]
异步fn索引(请求:HttpRequest)->&'static str{
“你好,世界!

” } #[actix_web::main] 异步fn main()->std::io::Result{ HttpServer::新建(|||){ 设cors=cors::default() .允许的来源(“https://www.rust-lang.org/") .allowed_origin_fn(| origin,|req_head | origin.as_bytes()。以(b.rust-lang.org)结尾) .allowed_方法(vec![“GET”,“POST”]) .allowed_头(vec![http::header::AUTHORIZATION,http::header::ACCEPT]) .allowed_头(http::header::CONTENT_类型) .最大年龄(3600岁); App::new().wrap(cors).service(index) }) .bind(((“127.0.0.1”,8080))? .run() .等待; 好(()) }
我的cargo.toml是:

[dependencies]
actix-cors = "0.5.4"
actix-web = "3.3.2"
当我调用索引文件时,我得到了一个成功,但我不应该拒绝或阻止它

GET/index.html HTTP/1.1
接受:*/*
接受编码:gzip,deflate
连接:保持活力
主机:本地主机:8080
用户代理:HTTPie/2.4.0
HTTP/1.1200ok
内容长度:19
内容类型:文本/纯文本;字符集=utf-8
日期:2021年5月4日星期二07:47:02 GMT
你好,世界


谢谢您的帮助。

我认为您将授权与CORS混为一谈。CORS并不意味着你不能直接访问页面,它意味着如果你正在访问站点A,而在站点A中,一些javascript试图访问站点B上的一些资源,浏览器将根据CORS设置决定你是否可以访问站点B

在您的情况下,您允许“https://www.rust-lang.org“访问您的站点()。这意味着如果https://www.rust-lang.org“如果您想使用javascript代码访问您的本地站点,浏览器将允许它这样做。但实际上,rust-lang.org几乎永远不会尝试访问您的本地主机,因此这只是actix cors的一个纯代码示例


我认为您正在寻找的是授权中间件,CORS不符合您的目的。

当您使用
httpie
测试脚本时,似乎没有涉及任何跨源代码,因为加载的页面是加载的主要且唯一的资源。您好。我也曾在浏览器中尝试过这一点,但同样的问题也发生了,我的CORS头没有被应用,所有域也都被浏览器接受(Mozilla Firefox)。