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

🎁个人主页:我们的五年****

🔍系列专栏: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. 测试网络服务](#1. 测试网络服务)

[2. 远程登录](#2. 远程登录)

[3. 调试网络问题](#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

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


相关推荐
烛.照10313 分钟前
Linux中安装rabbitMQ
linux·rabbitmq
Adler学安全14 分钟前
CS 与 BS 架构的差异
网络
Two_brushes.20 分钟前
【Linux】文件描述符
linux·服务器
robin_suli1 小时前
网络原理一> ip协议相关特性
网络协议·ip协议
你好呀我是裤裤2 小时前
Linux:指令大全(二)
linux·运维·服务器
doubt。2 小时前
3.【BUUCTF】XSS-Lab1
网络·安全·web安全·网络安全·xss
doubt。2 小时前
1.【BUUCTF】BUU XSS COURSE 11及XSS知识点
网络·安全·web安全·网络安全·xss
fareast_mzh2 小时前
Running a Snowflake on Debian 11
linux·服务器·debian
zhangzhangkeji3 小时前
(9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同
linux·网络·epoll 标志