Rust 程式設計小專案:WebServer 02

linghuyichong發表於2020-03-23

頭條地址:https://www.ixigua.com/i680718929763709798...
B站地址:https://www.bilibili.com/video/BV177411m78...

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 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章