Rust 编程小项目:WebServer 02

视频地址

头条地址:https://www.ixigua.com/i680718929763709798...
B站地址:https://www.bilibili.com/video/BV177411m78...

github地址

https://github.com/anonymousGiga/web-serve...

说明

此部分内容接前面内容Rust 编程小项目:WebServer 01

编写响应

HTTP简单介绍

(1)http请求报文包含三个部分内容 : 请求行 、 请求头 、请求体

Method Request-URI HTTP-Version CRLF //请求行:请求方式、协议版本等 
headers CRLF //请求头:包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息 
message-body //请求体:客户端真正要传送给服务端的内容

(2)http响应报文也有三部分内容:响应行、响应头、响应体

HTTP-Version Status-Code Reason-Phrase CRLF //响应行:报文协议及版本,状态码及状态描述; 
headers CRLF //响应头:由多个属性组成 
message-body //响应体:真正响应的内容
  • 返回一个响应行

    fn handle_client(stream: TcpStream) { 
      let mut buffer = [0; 512]; 
      stream.read(&mut buffer).unwrap(); 
      let response = "HTTP/1.1 200 OK\r\n\r\n"; //返回一个响应行     stream.write(response.as_bytes()).unwrap(); 
      stream.flush().unwrap(); 
    }
  • 返回一个真正的网页

    //main.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Hello!</title>
    </head>
    <body>
    <h1>Hello!</h1>
    <p>This is a response from a Rust server</p>
    </body>
    </html>
    //Rust代码修改
    use std::fs; 
    // --snip-- 
    fn handle_client(stream: TcpStream) { 
      let mut buffer = [0; 512]; 
      stream.read(&mut buffer).unwrap(); 
      let contents = fs::read_to_string("main.html").unwrap();
      let response = format!("HTTP/1.1 200 OK\r\n\r\n{}", contents); 
      stream.write(response.as_bytes()).unwrap();
      stream.flush().unwrap(); 
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
令狐一冲
讨论数量: 1

建议加个提醒: 即使用浏览器访问正确的网址(也就是1中的127.0.0.1:80),浏览器提示连接被重置,有可能是接收请求的buffer大小不足, 把大小调大即可(我在用Edge测试时发现了这种情况)

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
255
粉丝
120
喜欢
308
收藏
128
排名:335
访问:2.8 万
私信
所有博文
社区赞助商