【Linux网络编程】:URL(encode),HTTP协议,telnet工具

news2025/2/6 14:04:13

🎁个人主页:我们的五年

🔍系列专栏:Linux网络编程

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

Linux网络编程笔记:

https://mp.csdn.net/mp_blog/manage/column/allColumnList

前言:

当然先祝大家新年快乐!

我们访问网站,就是与对应的服务器进行IO,把我的请求给服务器,服务器给我对应的数据,或者处理问题的结果。URL是统一资源定位符,用来区分某个资源的地址。简单来说就是我们日常用的网址

目录

1.URL

1.1概念解释

1.2基本格式:

1.3URL-Decode,URL-Encode

1.4URL-encode工具:

2.HTTP协议

2.1https与http

2.2http的宏观格式:

2.3http版本直接区别:

2.4实例代码:

 3.telnet命令:

1. 测试网络服务

2. 远程登录

3. 调试网络问题


1.URL

1.1概念解释

URL:Uniform Resource Locator(统一资源定位器)。

URL是互联网上用来标识某一处资源的地址。它是一个标准的网络地址格式,用于指定网络资源的位置访问方式

所以URL就帮我们定位我们想要的资源在哪里(在哪里),和怎么去访问(怎么做)。

例如:

下面就是我们在百度的网址,直接在浏览器输入这个,就能访问百度。

https://www.baidu.com/

1.2基本格式:

scheme://host[:port]/path?query#fragment

scheme:表示协议类型。如:http,https。

host:表示服务器域名,或者IP地址。

port:表示端口号,http默认使用80端口号,https默认使用443端口号。现在大多是没有显示出来,访问的时候,浏览器会帮我们自动补充。

path:表示资源的路径,想访问服务器具体的哪个资源。注意:/表示不一定是根目录,而是web的更目录。

query:查询的字符串,向服务器传递参数。是一对一对的key=value,多个key=value用&连接。

1.3URL-Decode,URL-Encode

当我们查询一些特殊字符的时候,会对这些字符进行encode。

Decode的方法是:按ASII码表,把它转成16进制,然后加上百分号%。

wd=%5C%25%24%23%40!

\%$#@!上面就是浏览器帮我们进行的encode。

\的ASII码表是:92,对应的就是5C。然后再加上百分号%

1.4URL-encode工具:

点击这里:

 UrlEncode编码/UrlDecode解码 - 站长工具


2.HTTP协议

Http的第一次介绍,更全的会在后面慢慢补充。

http是建立在TCP上面的,TCP是有连接,面向字节流的。

2.1https与http

现在我们看到的基本是https了,然后https也是http发展而来的,https更加安全。现在在这个信息时代,保证信息的安全性是非常重要的。

HTTPS 是 HTTP 的安全版本,通过在 HTTP 和 TCP 之间添加 SSL/TLS 层来实现数据加密。HTTPS 的主要作用是保护数据的隐私和完整性,防止数据在传输过程中被窃取篡改

  • 数据加密:通过 SSL/TLS 加密数据,确保数据在传输过程中不被窃取。

  • 身份验证:通过数字证书验证服务器的身份,确保客户端连接到的是正确的服务器。

  • 完整性保护:通过加密算法确保数据在传输过程中不被篡改。

  1. 客户端发起 HTTPS 请求。

  2. 服务器发送 SSL/TLS 证书。

  3. 客户端验证证书的有效性。

  4. 客户端和服务器协商加密算法和密钥。

  5. 客户端和服务器通过加密通道进行数据传输。

2.2http的宏观格式:

http有请求模式和应答模式,这两个的格式基本差不多,但是第一行有点区别。

请求行包含:

1.请求方法。2.URI。3.http版本。

请求方法是GET,POST等。

响应行:

1.http版本。2.错误码。3.错误描述。

都是以\r\n进行结尾,报头和正文有一行空行进行区分。

每一个信息直接都有空格隔开,请求方法和URI有空格隔开,和http版本直接也有空格隔开。

 

2.3http版本直接区别:

现在用的http版本有1.0,1.1,2.0的。然后现在用的是1.1或者2.0了。

  • HTTP/1.0:简单但性能低下,适合早期的静态网页。

  • HTTP/1.1:解决了 HTTP/1.0 的许多性能问题,引入了持久连接和内容压缩等功能,是目前广泛使用的版本。

  • HTTP/2:在性能和功能上进行了重大改进,通过多路复用、头部压缩和服务器推送等技术,显著提高了传输效率和用户体验。

2.4实例代码:

#pragma once
#include <iostream>
#include <string>
#include <functional>
#include <unordered_map>
#include <fstream>
#include <ios>

#include "TcpServer.hpp"

using namespace TcpServerModule;

class HttpServer
{
    const std::string sep = "\r\n";
    const std::string blank_line = "\r\n";

public:
    HttpServer(int port)
        : _tsvr(std::make_unique<TcpServer>(port))
    {
    }
    void Start()
    {
        _tsvr->InitServer([this](SockPtr sockfd, InetAddr client)
                          { return this->HandlerHttpRequest(sockfd, client); });
        _tsvr->Loop();
    }

    // 处理http的方法
    bool HandlerHttpRequest(SockPtr sockfd, InetAddr client)
    {
        LOG(LogLevel::DEBUG) << "Get a new client:" << sockfd->Fd() << "addr info:" << client.Addr();
        std::string s;
        sockfd->Recv(&s);
        std::cout << s << std::endl;

        std::string status_line = "HTTP/1.1 200 OK" + sep + blank_line;
        char body[1024*1024];

        std::ifstream  ifs("./html.txt",std::ios_base::in | std::ios_base::binary);
        ifs.read(body,sizeof(body));
        std::string httpresponse = status_line + body;
        sockfd->Send(httpresponse);
        return true;
    }

    ~HttpServer() {}

private:
    std::unique_ptr<TcpServer> _tsvr;
};


 3.telnet命令:

telnet [选项] [主机名或IP地址] [端口号]

telnet 是一个用于网络协议测试远程登录的命令行工具,它允许用户通过 TCP 连接到远程服务器上的特定端口,进行交互式通信。

主机名和IP地址:表示要连接的远端的IP地址。

端口号表示要连接的端口号,如果不指定,就默认是23.(telnet服务的标准端口)

1. 测试网络服务

telnet 命令可以用来测试各种网络服务是否正常运行。例如,测试 HTTP 服务是否正常:

telnet example.com 80

连接成功后,可以手动输入 HTTP 请求:

GET / HTTP/1.1
Host: example.com

然后查看服务器的响应。

2. 远程登录

虽然现代网络中更推荐使用 ssh(更安全),但 telnet 仍然可以用于远程登录到某些旧系统:

telnet example.com
3. 调试网络问题

telnet 可以用来检查网络连接是否正常。例如,检查是否可以连接到某个端口:

telnet example.com 25

如果连接失败,可能表示网络问题或目标端口未开放。


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

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

相关文章

C语言基础系列【3】VSCode使用

前面我们提到过VSCode有多么的好用&#xff0c;本文主要介绍如何使用VSCode编译运行C语言代码。 安装 首先去官网&#xff08;https://code.visualstudio.com/&#xff09;下载安装包&#xff0c;点击Download for Windows 获取安装包后&#xff0c;一路点击Next就可以。 配…

学前端框架之前,你需要先理解 MVC

MVC 软件架构设计模式鼎鼎大名&#xff0c;相信你已经听说过了&#xff0c;但你确定自己已经完全理解到 MVC 的精髓了吗&#xff1f; 如果你是新同学&#xff0c;没听过 MVC&#xff0c;那可以到网上搜一些文章来看看&#xff0c;不过你要有心理准备&#xff0c;那些文章大多都…

Mysql:数据库

Mysql 一、数据库概念&#xff1f;二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…

熟练掌握Http协议

目录 基本概念请求数据Get请求方式和Post请求方式 响应数据响应状态码 基本概念 Http协议全称超文本传输协议(HyperText Transfer Protocol)&#xff0c;是网络通信中应用层的协议&#xff0c;规定了浏览器和web服务器数据传输的格式和规则 Http应用层协议具有以下特点&#…

C++的 I/O 流

本文把复杂的基类和派生类的作用和关系捋出来&#xff0c;具体的接口请参考相关文档 C的 I/O 流相关的类&#xff0c;继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念&#xff1a;内存和外设进行数据交互称为 I / O &#xff0c;例如&#xff1a;把数…

【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案

海关在对进口货物进行查验时,需要核对报关单上的各项信息。对报关单 PDF 批量指定区域识别改名后,海关工作人员可以更高效地从文件名中获取关键信息,如货物来源地、申报价值等。例如文件名 “[原产国]_[申报价值].pdf”,有助于海关快速筛选重点查验对象,提高查验效率和监管…

【大数据技术】本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …

数字化转型:概念性名词浅谈(第四讲)

​大家好&#xff0c;本篇文章是在新年之际写的&#xff0c;所以在这里先给大家拜个年。 今天要介绍的名词为ETL: ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transfor…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)

目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…

Linux:文件系统(软硬链接)

目录 inode ext2文件系统 Block Group 超级块&#xff08;Super Block&#xff09; GDT&#xff08;Group Descriptor Table&#xff09; 块位图&#xff08;Block Bitmap&#xff09; inode位图&#xff08;Inode Bitmap&#xff09; i节点表&#xff08;inode Tabl…

深度学习系列--01.入门

一.深度学习概念 深度学习&#xff08;Deep Learning&#xff09;是机器学习的分支&#xff0c;是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次&#xff0c;最终目标是让机器能够像人一样具有分析学习能力&#xff0c;能够识别文字…

如何抓取酒店列表: 揭开秘密

搜索酒店列表是一种强大的工具&#xff0c;可以从各种在线资源中收集有关住宿、价格和可用性的综合数据。无论您是要比较价格、分析市场趋势&#xff0c;还是要创建个性化的旅行计划&#xff0c;搜索都能让您有效地汇编所需的信息。在本文中&#xff0c;我们将介绍如何搜索酒店…

深度剖析 C++17 中的 std::byte:解锁字节级编程新境界

文章目录 一、引入背景二、基本定义三、特性详解不可隐式转换为整型显式转换为unsigned char位运算支持字面量支持四、使用场景内存操作数据序列化与反序列化网络通信文件读写操作五、与其他数据类型的交互与字符类型的交互与整数类型的交互与指针类型的交互六、注意事项避免混…

【多线程】线程池核心数到底如何配置?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…

三维空间全局光照 | 及各种扫盲

Lecture 6 SH for diffuse transport Lecture 7关于 SH for glossy transport 三维空间全局光照 diffuse case和glossy case的区别 在Lambertian模型中&#xff0c;BRDF是一个常数 diffuse case 跟outgoing point无关 glossy case 跟outgoing point有关 &#xff08;Gloss…

Polardb三节点集群部署安装--附虚拟机

1. 架构 PolarDB-X 采用 Shared-nothing 与存储计算分离架构进行设计&#xff0c;系统由4个核心组件组成。 计算节点&#xff08;CN, Compute Node&#xff09; 计算节点是系统的入口&#xff0c;采用无状态设计&#xff0c;包括 SQL 解析器、优化器、执行器等模块。负责数据…

java s7接收Byte字节,接收word转16位二进制

1图&#xff1a; 2.图&#xff1a; try {List list getNameList();//接收base64S7Connector s7Connector S7ConnectorFactory.buildTCPConnector().withHost("192.168.46.52").withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(3).build()…

挑战项目 --- 微服务编程测评系统(在线OJ系统)

一、前言 1.为什么要做项目 面试官要问项目&#xff0c;考察你到底是理论派还是实战派&#xff1f; 1.希望从你的项目中看到你的真实能力和对知识的灵活运用。 2.展示你在面对问题和需求时的思考方式及解决问题的能力。 3.面试官会就你项目提出一些问题&#xff0c;或扩展需求…

基于springboot的体质测试数据分析及可视化设计

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

java-重载与重写

介绍 在 Java 中&#xff0c;重载&#xff08;Overloading&#xff09; 和 重写&#xff08;Overriding&#xff09; 是两个重要的概念&#xff0c;它们都与方法有关&#xff0c;但它们的应用场景和行为完全不同。 通过理解重载和重写的区别&#xff0c;可以更好地设计类的继承…