【Linux】HTTP 协议

news2024/11/15 18:01:47

目录

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL-17】存储过程-[变量篇]详解-(系统变量&用户定义变量&局部变量)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

Pytorch使用前期准备

一、检查英伟达驱动和CUDA Toolkit是否正确安装 1.任务管理器性能选项卡中能正确显示显卡型号则表示显卡驱动正确安装 2. CUDA Toolkit会跟随pytorch自动安装 二、虚拟环境的准备 Miniconda — Anaconda documentationhttps://docs.anaconda.com/miniconda/ 1.安装anaconda或者…

Linux实用操作三

文章目录 Linux实用操作三网络传输ping命令介绍&#xff1a;示例&#xff1a; wget命令介绍&#xff1a;示例&#xff1a; curl命令介绍&#xff1a;示例&#xff1a; 端口介绍&#xff1a;端口的划分&#xff1a;查看端口占用&#xff1a; 进程管理进程介绍&#xff1a;查看进…

二十一、【机器学习】【非监督学习】- 谱聚类 (Spectral Clustering)​​

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

转置卷积方法

一、定义 1、卷积神经网络层通常会减少&#xff08;或保持不变&#xff09;采样输入图像的空间维度&#xff08;高和宽&#xff09;&#xff0c;另一种类型的卷积神经网络层&#xff0c;它可以增加上采样中间层特征图的空间维度&#xff0c; 用于逆转下采样导致的空间尺寸减小…

StringBuilder, Stringbuffer,StringJoiner

StringBuilder StringBuilder 代表可变字符串对象&#xff0c;相当于是一个容器&#xff0c;里面装的字符串是可以改变的&#xff0c;就是用来操作字符串的。 StringBuilder 比String更适合做字符串的修改操作&#xff0c;效率更高&#xff0c;代码更加的简洁。 public clas…

职升网:咨询工程师考试科目难不难?

咨询工程师考试包含四个科目&#xff0c;它们分别是《宏观经济政策与发展规划》、《工程项目组织与管理》、《项目决策分析与评价》以及《现代咨询方法与实务》。每个科目都有其独特的难度和特点。 《宏观经济政策与发展规划》&#xff1a;这一科目被认为是备考中相对容易的科…

ubuntu20.04支持win10远程桌面连接

1. 安装xrdp sudo apt install xrdp 2. 检查xrdp状态 sudo systemctl status xrdp 要处于running状态 3.&#xff08;若为Ubuntu 20&#xff09;添加xrdp至ssl-cert sudo adduser xrdp ssl-cert 4. 重启服务 sudo systemctl restart xrdp 5. window 远程桌面连接&am…

AVL树超详解上

前言 学习过了二叉树以及二叉搜索树后&#xff08;不了解二叉搜索树的朋友可以先看看这篇博客&#xff0c;二叉搜索树详解-CSDN博客&#xff09;&#xff0c;我们在一般情况下对于二叉搜索树的插入与查询时间复杂度都是O(lgN)&#xff0c;是十分快的&#xff0c;但是在一些特殊…

太速科技-基于XCVU9P+ C6678的8T8R的无线MIMO平台

基于XCVU9P C6678的8T8R的无线MIMO平台 一、板卡概述 板卡基于TI TMS320C6678 DSP和XCVU9P高性能FPGA&#xff0c;FPGA接入4片AD9361 无线射频&#xff0c;构建8输入8输出的无线MIMO平台&#xff0c;丰富的FPGA资源和8核DSP为算法验证和信号处理提供强大能力。 二…

有人泼冷水:为什么AI基础设施创业如此艰难?

最近&#xff0c;Adept AI 宣布被亚马逊收购&#xff0c;这印证了 JOHN HWANG&#xff08;前 AWS 生成式 AI 架构师&#xff0c;摩根士丹利交易主管&#xff09;对未来的判断。于是他写了这篇文章&#xff0c;表达了对 AI 基础设施这个领域创业的隐忧。认为“AI 基础设施创业公…

有观点认为NVIDIA中国特供GPU H20也将面临禁售

为了能将GPU卖给中国市场&#xff0c;NVIDIA一直在魔改各种特供版&#xff0c;但是每每遭遇美国政府加码&#xff0c;随时都会被再次禁售&#xff0c;H20又要面临同样的命运。NVIDIA H20只配备了78组SM单元&#xff0c;相当于H100 SXM版本的六成、PCIe 5.0版本的接近七成&#…

在qt的c++程序嵌入一个qml窗口

//拖拽一个QQuickWidget c端和qml通信的桥梁 找到qml的main.qml的路径 ui->quickWidget->setSource(QUrl::fromLocalFile("../../../code/main.qml"));// QML 与 Qt Widgets 通信//窗口就成了一个类实例对象pRoot (QObject*)ui->quickWidget->rootObje…

centos8 一键安装nginx指定版本

centos 8 的源里面已经有nginx&#xff0c;支持命令直接安装 dnf install nginx -y但默认安装 1.14 版本&#xff0c;版本较老&#xff0c;存在安全问题。在官网找到指定版本rpm包&#xff0c;可直接安装 http://nginx.org/packages/centos/8/x86_64/RPMS/这里选择1.18&#…

python—爬虫爬取视频样例

下面是一个使用Python爬虫爬取视频的基本例子。创建一个Python爬虫来爬取视频通常涉及到几个步骤&#xff1a;发送HTTP请求、解析网页内容、提取视频链接、下载视频文件。 import jsonimport requests from lxml import etreeif __name__ __main__:# UA伪装head {"User…

一款国外开发的高质量WordPress下载站模板主题

5play下载站是由国外站长开发的一款WordPress主题&#xff0c;主题简约大方&#xff0c;为v1.8版本&#xff0c; 该主题模板中包含了上千个应用&#xff0c;登录后台以后只需要简单的三个步骤就可以轻松发布apk文章&#xff0c; 我们只需要在WordPress后台中导入该主题就可以…

《简历宝典》17 - 简历中“技术能力”,如何丰满且有层次,前端篇

这一节开始对技术能力模块做讲解&#xff0c;我们身边的这些互联网IT从业者们&#xff0c;前端开发、Java开发、软件测试又或者是其他职位的开发者们&#xff0c;技术能力这个模块是绕不过去的&#xff0c;从简历上看&#xff0c;这个模块体现了我们之前软件工作生涯中的技术功…

二、C#数据类型

本文是网页版《C# 12.0 本质论》第二章解读。欲完整跟踪本系列文章&#xff0c;请关注并订阅我的Essential C# 12.0解读专栏。 前言 数据类型&#xff08;Data Type&#xff09;是一个很恼人的话题。 似乎根本没必要对数据类型进行展开讲解&#xff0c;因为人人都懂。 但是…

Ubuntu 24.04 LTS Noble安装Docker Desktop简单教程

Docker 为用户提供了在 Ubuntu Linux 上快速创建虚拟容器的能力。但是&#xff0c;那些不想使用命令行管理容器的人可以在 Ubuntu 24.04 LTS 上安装 Docker Desktop GUI&#xff0c;本教程将提供用于设置 Docker 图形用户界面的命令…… Docker Desktop 是一个易于使用的集成容…

IVI(In-Vehicle Infotainment,智能座舱的信息娱乐系统)

IVI能够实现包括三维导航、实时路况、辅助驾驶等在线娱乐功能。 IVI人机交互形式&#xff08;三板斧&#xff09;&#xff1a;声音、图像、文字 IVI人机交互媒介I&#xff08;四件套&#xff09;&#xff1a;中控屏幕&#xff08;显示、触控&#xff09;、仪表显示、语言、方…