您的位置:首页 > 科技 > IT业 > 【Linux】HTTP 协议

【Linux】HTTP 协议

2024/12/26 13:50:59 来源:https://blog.csdn.net/m0_68146877/article/details/140588856  浏览:    关键词:【Linux】HTTP 协议

目录

    • 1. URL
    • 2. HTTP 协议
      • 2.1. HTTP 请求
      • 2.2. HTTP 响应

1. URL

URL 表示着是统一资源定位符(Uniform Resource Locator), 就是 web 地址,俗称“网址”;
每个有效的 URL 可以通过互联网访问唯一的资源, 是互联网上标准资源的地址;

URL 的主要由四个部分组成:

scheme :// host[:port] / path
  • scheme(协议): 所使用的传输协议, 通常为 HTTP 协议或 HTTPS 协议;
  • host(主机): 是资源所在的网站或服务器的名字, 又称为域名; 主机名也可以使用点分十进制的 IP地址 代替; 使用 :// 与协议分隔;
  • port(端口): 端口号, 通常会被省略, 表示使用协议默认的端口号; 使用 :与主机分隔;
  • path(路径): 所访问资源的相对路径; 同时第一个 / 可以分隔端口号和资源路径;

2. HTTP 协议

HTTP(超文本传输协议,HyperText Transfer Protocol) 是一种用于分布式、协作式、超媒体信息系统的应用层协议, 是基于 TCP/IP 通信协议来传输数据的;

HTTP 协议由 HTTP请求 和 HTTP响应 两部分组成

2.1. HTTP 请求

HTTP 请求由 请求行(request line), 请求头部(header), 空行和请求数据 四个部分组成;

在这里插入图片描述

  • 请求行:
    请求方法: 指定要执行的操作; 如 GET, POST, PUT, DELETE 等;
    URL : 请求的资源路径;
    协议版本: 协议的版本, 如 HTTP/1.0, HTTP/1.1, HTTP/2.0 等;

  • 请求报头:
    包含了请求的具体信息, 由多组 K : V 结构组成;

  • 空行:
    请求报头和有效载荷之间的分隔;

  • 有效载荷:
    包含要发送给服务器的数据, 可以为空;

方法含义
GET从服务器获取资源
HEAD类似于 GET,但服务器只返回响应的头部,不返回实际数据
POST向服务器发送数据以创建新资源
PUT 向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源
DELETE从服务器删除指定的资源
OPTION返回服务器支持的 HTTP 方法
TRACE回显服务器收到的请求
CONNECT建立一个到服务器的隧道,通常用于 HTTPS 连接

那么就可以将浏览器视为客户端, 编写服务器, 通过 URL 的方式, 接收浏览器的 HTTP 请求;
可以不做任何处理, 看一看 HTTP 请求;

具体代码实现: [HTTP 网页简易验证];

Server.cc

#include "Server.hpp"
#include "Http.hpp"using call_back = function<Response(Request)>;
class Serve
{
public:Serve(call_back cb) : _cb(cb) {}void CallBack(shared_ptr<Socket> sockfd){Request req;string buf;while (1){// 接收int n = sockfd->Recv(buf);if (n <= 0){LOG(FATAl, "Recv fail");break;}// 直接打印 Http 请求cout << buf << endl;// // 反序列化// req.DeSerialize(buf);// // 回调// Response resp = _cb(req);// // 序列化// string package;// resp.Serialize(package);// // 发送// sockfd->Send(package);}}call_back _cb;
};int main(int argc, char *argv[])
{HttpServe hs;Serve serve(bind(&HttpServe::HandlerServe, &hs, placeholders::_1));TpcServer tpc(bind(&Serve::CallBack, &serve, placeholders::_1));tpc.Start();return 0;
}

在这里插入图片描述

2.2. HTTP 响应

HTTP 响应由 状态行, 响应报头, 空行和响应正文 四部分组成;

在这里插入图片描述

  • 状态行:
    协议版本: 协议的版本, 如 HTTP/1.0, HTTP/1.1, HTTP/2.0 等;
    状态码: 三位数, 表示请求的处理结果;
    状态码描述: 状态码的简短描述;

  • 响应报头:
    包含了响应的具体信息, 由多组 K : V 结构组成;

  • 空行:
    请求报头和有效载荷之间的分隔;

  • 有效载荷:
    包含服务器返回的数据, 如请求的网页内容, 图片, JSON数据等;

状态码含义
1xx表示通知信息,服务器收到请求,需要请求者继续执行操作
2xx表示成功,操作被成功接收并处理
3xx表示重定向,需要进一步的操作以完成请求
4xx表示客户端错误,请求包含语法错误或无法完成请求
5xx表示服务器错误,服务器在处理请求的过程中发生了错误

可以通过 telnet 命令获取服务器的响应;

telnet baidu.com 80

在这里插入图片描述

输入 ^] (ctrl + ]) 连接服务器;

在这里插入图片描述

发出简易的请求;

// 换行
GET / HTTP/1.0
// 换行

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com