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

news/2025/2/6 12:19:27/

🎁个人主页:我们的五年

🔍系列专栏:Linux网络编程

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

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

https://i-blog.csdnimg.cn/direct/704149dd1e2c4fbcaa3ab4f21dd339bf.gif" />​

https://i-blog.csdnimg.cn/direct/5271d18c85414d2bb23d348c908c47aa.gif" />

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协议

https%E4%B8%8Ehttp-toc" name="tableOfContents" style="margin-left:40px">2.1https与http

http%E7%9A%84%E5%AE%8F%E8%A7%82%E6%A0%BC%E5%BC%8F%EF%BC%9A-toc" name="tableOfContents" style="margin-left:40px">2.2http的宏观格式:

http%E7%89%88%E6%9C%AC%E7%9B%B4%E6%8E%A5%E5%8C%BA%E5%88%AB%EF%BC%9A-toc" name="tableOfContents" style="margin-left:40px">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:表示协议类型。如:httphttps。

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

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

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

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

https://i-blog.csdnimg.cn/direct/afcedbe4c4054039a301ae3c736e9c9c.png" width="925" />

1.3URL-Decode,URL-Encode

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

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

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

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

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

https://i-blog.csdnimg.cn/direct/10e0c2d26ed74753a76ade69d8828a7e.png" width="2160" />

1.4URL-encode工具:

点击这里:

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


2.HTTP协议

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

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

https%E4%B8%8Ehttp" name="2.1https%E4%B8%8Ehttp">2.1https与http

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

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

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

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

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

  1. 客户端发起 HTTPS 请求。

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

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

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

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

https://i-blog.csdnimg.cn/direct/a9a60effb61943f3a78ac91e7ecf440c.png" width="966" />

http%E7%9A%84%E5%AE%8F%E8%A7%82%E6%A0%BC%E5%BC%8F%EF%BC%9A" name="2.2http%E7%9A%84%E5%AE%8F%E8%A7%82%E6%A0%BC%E5%BC%8F%EF%BC%9A">2.2http的宏观格式:

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

请求行包含:

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

请求方法是GET,POST等。

响应行:

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

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

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

https://i-blog.csdnimg.cn/direct/ea51a886b076447e8f0e61fc82abe0f5.png" width="1348" />

https://i-blog.csdnimg.cn/direct/6e3c2f344c044854871e0b209fe8e628.png" width="1332" /> 

http%E7%89%88%E6%9C%AC%E7%9B%B4%E6%8E%A5%E5%8C%BA%E5%88%AB%EF%BC%9A" name="2.3http%E7%89%88%E6%9C%AC%E7%9B%B4%E6%8E%A5%E5%8C%BA%E5%88%AB%EF%BC%9A">2.3http版本直接区别:

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

https://i-blog.csdnimg.cn/direct/fa65047b8c5d47a4b3f19e97ae7ff9b1.png" width="1420" />

  • 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.ppmy.cn/news/1569791.html

相关文章

初入机器学习

写在前面 本专栏专门撰写深度学习相关的内容&#xff0c;防止自己遗忘&#xff0c;也为大家提供一些个人的思考 一切仅供参考 基于亚马逊的MXNet库本专栏是对李沐博士的《动手学深度学习》的笔记&#xff0c;仅用于分享个人学习思考以下是本专栏具体所需的环境&#xff08;放…

WebSocket——环境搭建与多环境配置

一、前言&#xff1a;为什么要使用多环境配置&#xff1f; 在开发过程中&#xff0c;我们通常会遇到多个不同的环境&#xff0c;比如开发环境&#xff08;Dev&#xff09;、测试环境&#xff08;Test&#xff09;、生产环境&#xff08;Prod&#xff09;等。每个环境的配置和需…

分布式光伏监控解决方案-并网柜保护装置

一、并网柜防孤岛保护 继电保护及安全自动装置 根据《光伏发电站接入电力系统的技术规定》GB/T 19964-2012的相关要求&#xff0c;光伏发电站应配置独立的防孤岛保护装置&#xff0c;动作时间应不大于2s。防孤岛保护还应与电网侧线路保护相配合。 孤岛islanding 包含负荷和电源…

MySQL 进阶专题:自连接、子查询与合并查询的深入探讨

自连接、子查询与合并查询的深入探讨 在关系型数据库中&#xff0c;自连接、子查询和合并查询是非常重要的技术。它们不仅能解决复杂的业务需求&#xff0c;还可以优化代码逻辑。本文结合实际案例和SQL语句&#xff0c;带您深入了解这些技术的使用场景和意义。 自连接&#x…

在JAX-RS中获取请求头信息的方法

在JAX-RS中获取请求头信息的方法 HeaderParam注解&#xff0c;可以直接将请求头中的特定值注入到方法参数中&#xff0c;代码示例&#xff1a; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.Path; import javax.ws.rs.core.Response;Path(&q…

电控三周速成计划参考

第1周&#xff1a;基础搭建与GPIO控制 学习目标&#xff1a;建立开发环境&#xff0c;掌握最基础的硬件控制能力 每日学习&#xff08;2-3小时&#xff09;&#xff1a; 环境搭建&#xff08;2天&#xff09; 安装Keil MDK-ARM STM32CubeMX使用CubeMX创建第一个工程&#xf…

【学Rust写CAD】4 相对坐标系详解与实现要素概览

相对坐标系&#xff08;Relative Coordinate System, RCS&#xff09;是一个强大且灵活的工具&#xff0c;尤其在绘图、三维建模等领域中发挥着重要作用。以下是对相对坐标系的详细解析&#xff0c;包括其定义、应用、特性、与绝对坐标的区别、在CAD中的应用以及实现方式。 一…

2 Flink 部署及启动

2 Flink 部署及启动 1. Flink 在 Yarn 上的部署架构2. 启动集群3. 模式一: yarn-session4. 模式二: yarn-cluster Flink 支持多种安装模式: 1.local&#xff08;本地&#xff09;——单机模式&#xff0c;一般不使用&#xff1b; 2.standalone——独立模式&#xff0c;Flink 自…