当前位置: 首页 > news >正文

【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
// 换行

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • <数据集>AffectNet表情识别数据集<目标检测>
  • 【快速逆向二/无过程/有源码】掌上高考—2024高考志愿填报服务平台
  • 神经网络处理器模拟器的一点思考
  • 使用 PowerShell 自动化图像识别与鼠标操作
  • 四、GD32 MCU 常见外设介绍 (4) EXTI 中断介绍
  • ip地址是电脑还是网线决定的
  • Potree在web端显示大型点云模型文件
  • MySQL_JDBC
  • 【git】切换到远程其他分支
  • Flask 框架 redirect() url_for()
  • python键盘操作工具:ctypes、pyautogui
  • Ajax学习笔记
  • ARM功耗管理之功耗和安全
  • 51单片机嵌入式开发:16、STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作
  • 下拉菜单过渡
  • 分享的文章《人生如棋》
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Fundebug计费标准解释:事件数是如何定义的?
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java IO学习笔记一
  • Map集合、散列表、红黑树介绍
  • Rancher如何对接Ceph-RBD块存储
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue学习第二天
  • 反思总结然后整装待发
  • 关于List、List?、ListObject的区别
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 学习笔记:对象,原型和继承(1)
  • 自动记录MySQL慢查询快照脚本
  • nb
  • hi-nginx-1.3.4编译安装
  • # 计算机视觉入门
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (5)STL算法之复制
  • (C语言)fgets与fputs函数详解
  • (done) 两个矩阵 “相似” 是什么意思?
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (SpringBoot)第二章:Spring创建和使用
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (待修改)PyG安装步骤
  • (分布式缓存)Redis哨兵
  • (力扣)循环队列的实现与详解(C语言)
  • (四) 虚拟摄像头vivi体验
  • (已解决)什么是vue导航守卫
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET技术成长路线架构图
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /etc/skel 目录作用
  • @Bean注解详解
  • @ComponentScan比较
  • @FeignClient注解,fallback和fallbackFactory
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解