頭條地址: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 協議》,轉載必須註明作者和本文連結