HTTP REQUEST的OPTIONS是什么?

上次有人问我关于OPTIONS,我的知识还停留在HTTP的GET/POST,

现在的HTTP 1.1已经有GET/POST/PUT/DELETE/PATCH了,那还有一个OPTIONS是什么呢?

其实就是flash年代的跨站访问!浏览器firefox/chrome为了网站的安全,在访问前,先发送一个OPTIONS的请求,在得到服务器的回应并允许之后,再发送其它的请求,actix_web提供了actix_cors来解决这下问题!

如下代码:

use actix_cors::Cors;
...
    
HttpServer::new(move || {
        App::new()
            .wrap(Cors::new() //
                // .allowed_origin("http://127.0.0.1:8080")
                .send_wildcard()
                .allowed_methods(vec!["GET", "POST", "PUT", "DELETE"])
                .allowed_headers(vec![http::header::AUTHORIZATION, http::header::ACCEPT])
                .allowed_header(http::header::CONTENT_TYPE)
                .max_age(3600)
                .finish())
            .data(pool.clone())
            .wrap(actix_web::middleware::Logger::default())
            .wrap(crate::middleware::authen_middleware::Authentication)
            .wrap_fn(|req, srv| {
               srv.call(req).map(|res| res)
           })
            .configure(config::app::config_services)
        })
    .bind(&app_url)?
    .run()
    .await

如上代码,允许所有的访问来源(Access-Control-Allow-Origin: *); 如果取消注释,就仅允许来自于http://127.0.0.1:8080的访问!

 

Tags

添加新评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。