http协议补充
- 互联网
- 2025-07-22 02:39:01

7.7实现http请求 class httprequest { public: void Deserialize(std::string content) { while (true) { auto pos = content.find(sep); if (pos == std::string::npos) { break; } std::string temp = content.substr(0, pos); if (temp.empty()) { break; } req_header_.push_back(temp); content.erase(0, pos + sep.size()); } auto pos = content.find(sep); text_ = content.substr(pos + sep.size()); } void parse() { std::stringstream sstr(req_header_[0]); sstr >> method_ >> url_ >> httpversion_; // 默认以空格分割 path_ = wwwroot; if (url_ == "/" || url_ == "/index.html") { path_ += "/"; path_ += homepage; } else { path_ += url_; } } void debugprint() { std::cout << "---------------------" << std::endl; for (auto &e : req_header_) { std::cout << e << std::endl; } std::cout << text_ << std::endl; std::cout << "method: " << method_ << std::endl; std::cout << "url: " << url_ << std::endl; std::cout << "http_version: " << httpversion_ << std::endl; std::cout << "path: " << path_ << std::endl; std::cout << "---------------------" << std::endl; } public: std::vector<std::string> req_header_; std::string text_; std::string method_; std::string url_; std::string httpversion_; std::string path_; }; 7.8http细节
http的方法
GET 获取资源 //提交的参数使用拼接到url结尾的方式提交;参数数量受限且不安全; POST 传输实体主体 //提交的参数是放在了请求正文部分; CONNECT 用隧道协议建立代理 数据都是通过表单提交的;
http状态码
常见的如200 OK,404 Not Found;
对于浏览器标准是有点的,但是支持的并不是很好;
对于重定向包括临时重定向和永久重定向,浏览器发送请求,服务器不是直接提供服务,而是返回一个响应;响应报头是3XX,location里是一个新的地址;浏览器收到后会重新向新地址发起一个请求;
临时重定向就是还是每次都要先访问服务器,然后服务器重定向,使用场景如:登录界面成功后跳转;
response_line = "HTTP/1.0 302 Found\r\n"; std::string response_header = "Content-Length: "; response_header += std::to_string(text.size()); response_header += "\r\n"; response_header += "Location: https://www.qq.com\r\n"; response_header += "\r\n";http常见的报头
Content-Type: 数据类型(text/html等),方便显示图片等资源; Connection:表示是否在通信时选用长连接 Content-Length: Body的长度 Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; User-Agent: 声明用户的操作系统和浏览器版本信息; referer: 当前页面是从哪个页面跳转过来的; location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问; Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能; 一个页面是包含非常多的元素的,每个元素就是一个资源;
对于一个请求响应一个资源,然后关闭连接是短连接,http/1.0支持的就是短连接;而只建立一个连接,发送多个请求和响应是长连接,http/1.1支持的就是长连接;
http协议默认是无状态的;http有对登录用户的会话保持功能;
响应报头中有Set - Cookie字段,设置了属性值,发送给浏览器保存起来,这种保存了属性值的文件叫做cookie文件;浏览器每一次向该服务发起请求时,都会携带cookie文件中的内容;保存cookie文件一般有有文件级的方式iye有内存级的方式;对于内存级设计,浏览器启动后就变成了一个进程,在进程当中是可以new空间的,可以将cookie的内容保存在进程的内存当中,不往磁盘上写;如果是文件级设计会直接将cookie信息保存到文件当中;这个文件被保存的浏览器特定的安装路径下; cookie文件会自动删除;