【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. 测试网络服务

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.rhkb.cn/news/13003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6 [新一代Github投毒针对网络安全人员钓鱼]

0x01 前言 在Github上APT组织“海莲花”发布存在后门的提权BOF&#xff0c;通过该项目针对网络安全从业人员进行钓鱼。不过其实早在几年前就已经有人对Visual Studio项目恶意利用进行过研究&#xff0c;所以投毒的手法也不算是新的技术。但这次国内有大量的安全从业者转发该钓…

【技海登峰】Kafka漫谈系列(二)Kafka高可用副本的数据同步与选主机制

【技海登峰】Kafka漫谈系列(二)Kafka高可用副本的数据同步与选主机制 一. 数据同步 在之前的学习中有了副本Replica的概念,解决了数据备份的问题。我们还需要面临一个设计难题即:如何处理分区中Leader与Follwer节点数据同步不匹配问题所带来的风险,这也是保证数据高可用的…

使用DeepSeek R1 + 了解部署

官网注册 R1模型&#xff0c;推理模型 参考视频理解 理解大语言模型的本质 大模型在训练时是将内容token化的大模型知识是存在截止时间的大模型缺乏自我认知、自我意识记忆有限输出长度有限 智商理解&#xff0c;例如下面的DeepSeek的测试&#xff1a; 用DeepSeek 官网手…

Page Assist - 本地Deepseek模型 Web UI 的安装和使用

Page Assist Page Assist是一个开源的Chrome扩展程序&#xff0c;为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI&#xff0c;与自己的AI模型进行对话&#xff0c;获取智能辅助。这种设计不仅方便了用户随时调用AI的能力&#xff0c;还保护了…

【优先算法】专题——位运算

在讲解位运算之前我们来总结一下常见的位运算 一、常见的位运算 1.基础为运算 << &&#xff1a;有0就是0 >> |&#xff1a;有1就是1 ~ ^&#xff1a;相同为0&#xff0c;相异位1 /无进位相加 2.给一个数 n&#xff0c;确定它的二进制表示…

Eureka加密 及Gateway搭建 - 基于SpringBoot不同版本配置方式

前言&#xff1a;在最近开发过程中 偶遇根据SpringBoot不同版本导致配置方式不一致等问题 通用&#xff1a;Eureka服务配置 Server端&#xff1a; 一、引入依赖 spring-boot-starter-security <dependencies><!-- Eureka 声明依赖 --><dependency><gro…

3-Not_only_base/2018网鼎杯

3-Not_only_base 打开code MCJIJSGKPZZYXZXRMUW3YZG3ZZG3HQHCUS 分析&#xff1a; 首先看题知道解密过程中肯定有base解密。 知识点1&#xff1a; Base64字符集&#xff1a; 包含大小写字母&#xff08;A-Z、a-z&#xff09;、数字&#xff08;0-9&#xff09;以及两个特殊字…

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

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

Java基础面试题50题

1&#xff0c;""空字符串的作用 package com.neuedu.nineteen;public class Test {public static void main(String[] args) {String s"";for (char i a; i < d; i) {ssi;//输出abc // sis;//输出cba}System.out.println(s);} }如题所示&…

【现代深度学习技术】深度学习计算 | 延后初始化自定义层

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

Immutable设计 SimpleDateFormat DateTimeFormatter

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解不可变设计模式&#xff0c;时间format有线程安全要求的注意使用DateTimeFormatter 目录 ImmutableSimpleDateFormat 非线程安全可以synchronized解决&a…

Got socket exception during request. It might be caused by SSL misconfiguration

引入xutils3依赖&#xff0c;结果包找不到 maven里面添加阿里云镜像 核心 maven { url uri("https://maven.aliyun.com/nexus/content/groups/public/") }repositories {google()maven { url uri("https://maven.aliyun.com/nexus/content/groups/public/"…

RocketMQ实战—4.消息零丢失的方案

大纲 1.全链路分析为什么用户支付完成后却没有收到红包 2.RocketMQ的事务消息机制实现发送消息零丢失 3.RocketMQ事务消息机制的底层实现原理 4.是否可以通过同步重试方案来代替事务消息方案来实现发送消息零丢失 5.使用RocketMQ事务消息的代码案例细节 6.同步刷盘Raft协…

【Elasticsearch】date range聚合

好的&#xff0c;继续之前的示例&#xff1a; json ] } } } } 4.3 自定义键&#xff08;key&#xff09; 通过为每个范围指定一个唯一的键&#xff08;key&#xff09;&#xff0c;可以在结果中更方便地引用每个范围。这在使用keyed参数将结果以键值对形式返回时尤其有用。 j…

【R语言】获取数据

R语言自带2种数据存储格式&#xff1a;*.RData和*.rds。 这两者的区别是&#xff1a;前者既可以存储数据&#xff0c;也可以存储当前工作空间中的所有变量&#xff0c;属于非标准化存储&#xff1b;后者仅用于存储单个R对象&#xff0c;且存储时可以创建标准化档案&#xff0c…

[leetcode]双指针算法的使用

零.参考文章 双指针技术在数组和链表问题中的应用解析-CSDN博客 一.使用情况 双指针即是在有序数组的情况下&#xff0c;我们通过两个指针在遍历的过程中进行标记&#xff0c;对满足条件的进行处理&#xff0c;直至遍历完整个数组。 二.举个例子 2.1小人过河问题&#xff…

自指学习:AGI的元认知突破

文章目录 引言:从模式识别到认知革命一、自指学习的理论框架1.1 自指系统的数学定义1.2 认知架构的三重反射1.3 与传统元学习的本质区别二、元认知突破的技术路径2.1 自指神经网络架构2.2 认知效能评价体系2.3 知识表示的革命三、实现突破的关键挑战3.1 认知闭环的稳定性3.2 计…

C++ 入门速通-第5章【黑马】

内容来源于&#xff1a;黑马 集成开发环境&#xff1a;CLion 先前学习完了C第1章的内容&#xff1a; C 入门速通-第1章【黑马】-CSDN博客 C 入门速通-第2章【黑马】-CSDN博客 C 入门速通-第3章【黑马】-CSDN博客 C 入门速通-第4章【黑马】-CSDN博客 下面继续学习第5章&…

hot100(7)

61.31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09; 数组问题&#xff0c;下一个更大的排列 题解&#xff1a;31. 下一个排列题解 - 力扣&#xff08;LeetCode&#xff09; &#xff08;1&#xff09;从后向前找到一个相邻的升序对&#xff08;i,j)&#xff0c;此时…

图像分类与目标检测算法

在计算机视觉领域&#xff0c;图像分类与目标检测是两项至关重要的技术。它们通过对图像进行深入解析和理解&#xff0c;为各种应用场景提供了强大的支持。本文将详细介绍这两项技术的算法原理、技术进展以及当前的落地应用。 一、图像分类算法 图像分类是指将输入的图像划分为…