微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Cors 标头未使用 Actix_Cors 设置,使用以 Rust 编写的 Actix_Web 服务器

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

主要功能

use actix_cors::Cors;
use actix_web::{get,http,web,App,HttpRequest,HttpResponse,HttpServer};

#[get("/index.html")]
async fn index(req: HttpRequest) -> &'static str {
    "<p>Hello World!</p>"
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        let cors = Cors::default()
            .allowed_origin("https://www.rust-lang.org/")
            .allowed_origin_fn(|origin,_req_head| origin.as_bytes().ends_with(b".rust-lang.org"))
            .allowed_methods(vec!["GET","POST"])
            .allowed_headers(vec![http::header::AUTHORIZATION,http::header::ACCEPT])
            .allowed_header(http::header::CONTENT_TYPE)
            .max_age(3600);

        App::new().wrap(cors).service(index)
    })
    .bind(("127.0.0.1",8080))?
    .run()
    .await;

    Ok(())
}

我的cargo.toml 是:

[dependencies]
actix-cors = "0.5.4"
actix-web = "3.3.2"

当我调用索引文件时,我不应该成功,因为它应该被拒绝或阻止。

GET /index.html HTTP/1.1
Accept: */*
Accept-Encoding: gzip,deflate
Connection: keep-alive
Host: localhost:8080
User-Agent: HTTPie/2.4.0



HTTP/1.1 200 OK
content-length: 19
content-type: text/plain; charset=utf-8
date: Tue,04 May 2021 07:47:02 GMT

<p>Hello World!</p>

感谢您的帮助。

解决方法

我认为您将授权与 CORS 混合使用。 CORS 并不意味着您无法直接访问该页面,它意味着如果您正在访问站点 A,并且在站点 A 中,某些 javascript 正在尝试访问站点 B 上的某些资源,浏览器将决定您是否可以访问站点B 基于 CORS 设置。

就您而言,您允许“https://www.rust-lang.org”访问您的网站 (http://127.0.0.1/index.html)。这意味着如果“https://www.rust-lang.org”以某种方式想要使用 javascript 代码来访问您的本地站点,浏览器将允许它这样做。但在实践中,rust-lang.org 几乎不会尝试访问你的本地主机,所以这只是一个纯粹的 actix cors 代码示例。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?