前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Linux网络编程】:URL(encode),HTTP协议,telnet工具

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

作者头像
用户11396661
发布2025-02-06 08:43:21
发布2025-02-06 08:43:21
7700
代码可运行
举报
文章被收录于专栏:C++开发
运行总次数:0
代码可运行

前言:

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

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实例代码:

代码语言:javascript
代码运行次数:0
复制
#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 服务是否正常:

代码语言:javascript
代码运行次数:0
复制
telnet example.com 80

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

代码语言:javascript
代码运行次数:0
复制
GET / HTTP/1.1
Host: example.com

然后查看服务器的响应。

2. 远程登录

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

代码语言:javascript
代码运行次数:0
复制
telnet example.com
3. 调试网络问题

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

代码语言:javascript
代码运行次数:0
复制
telnet example.com 25

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 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命令:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档