当前位置: 首页 > article >正文

应用层协议http(无代码版)

目录

认识URL

urlencode 和 urldecode

HTTP 协议请求与响应格式

HTTP 的请求方法

GET 方法

POST 方法

HTTP 的状态码

HTTP 常见 Header

Location

关于 connection 报头

HTTP版本

远程连接服务器工具

setsockopt


我们来学习应用层协议http。

虽然我们说, 应用层协议是我们程序猿自己定的,但实际上, 已经有大佬们定义了一些现 成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其 中之一。 在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至 关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输 超文本(如 HTML 文档)。 HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送 请求,服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、无状态的协 议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

认识URL

这里说下,http或者https的区别就是https是支持加密的,更安全,最前面的叫做协议名称。

//后面就是访问路径+请求报头,请求报头的格式是kv的格式就是什么:什么,这些都是浏览器自动填写的,在url中/不一定是根目录,其实叫web根目录,二者不一定相同,就是这个/是根据当前请求位置而定的,像你要请求的网址如果在本地,那本地就是根目录,接着你可以接着往后输入根目录的其他内置的功能页,这些页比如/login/会直接被浏览器拼接在web根目录的后面,完善请求路径,然后路径所指向的内容就是请求正文(目标文件),这个正文可以是html,css,js等的页面,记住,浏览器会根据这个路径直接运行这个文件,也就是说直接上传一个html所在的路径就相当于用浏览器直接访问然后运行它,当然你也可以直接传一堆的html代码,浏览器直接可以做解析。所以我要通过url访问某个服务器的网页,就相当于请求某个资源,这些资源路径本质就是文件路径,这和Linux下是一样的。为什么没有体现端口号呢?成熟的应用层协议,往往和端口号是强关联的,这个port已经提前内置到浏览器里面了,人家本来就认识。我们把在服务器和客户端之间的浏览器这种东西叫做代理服务器

相当于转接端,它会将用户的请求转接给其后面的多个客户端,多个客户端进行处理后将响应返回给代理服务器然后呈现给用户。这很多个服务器就相当于多线程。所以我们平时用的百度等的各种app就是代理服务器不是真的位于最后的服务器。

代理服务器主要起到

我的数据给别人,别人的数据发送给我的本质是在做I/O,我们网上所有的行为都是在做I/O,我们通过url以及端口号进行通信,所以我们要获取资源首先要确定我们要的资源在哪台服务器上(网络,ip),在什么路径下(系统,路径)。

urlencode 和 urldecode

像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义. 转义的规则如下: 将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位 做一位,前面加上%,编码成%XY 格式。urldecode 就是 urlencode 的逆过程。

对于特殊字符进行搜索时用的这种函数进行类似于序列化/反序列化的操作,这种处理方法是相当于在定协议了。这种函数的设计网上自己搜索一下就有了。

HTTP 协议请求与响应格式

http是应用层协议,是基于tcp协议的,所以http也是面向连接的,并且面向字节流的。

可以看到http的请求/响应都是结构化数据,一条url就是一条已经序列化的请求或者响应。对于http请求,首行: [方法] + [url] + [版本]中间用空格隔开,然后接上换行符/r/n,接着是请求报头,HTTP 的请求报头(HTTP Request Headers)在浏览器或客户端与服务器通信时,起着非常重要的作用。它们提供了关于客户端、请求内容、服务器期望的响应等关键信息,就是哈希表的结构,接着是空行,这个空行其实就是换行符,最后是请求正文,我们一个标准的http的request是需要有以上4个部分的,这个请求报头其实是可以没有的。正文(body)也可以是图片,文本,html等。像图片是二进制的格式是否能发送/读取图片完全取决于格式。

一下展示请求格式展示:

我们接着看应答格式,首行: [版本号] + [状态码] + [状态码解释],接着是响应报头Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束,空行,接着是响应正文Body: 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一 个 html 页面, 那么 html 页面内容就是在 body 。

这个状态码和状态描述符都是人为规定的。

那怎么通信呢?首先用户向浏览器发送一个请求,内部发送的是一个请求结构体,然后经过序列化成一行字符串(请求行+请求报头+空行+请求正文),然后经由浏览器发送给服务端,服务端经过反序列化提取有效信息,然后返回资源,生成应答组件应答结构体,然后用相同的方式序列化,浏览器反序列化,通过浏览器读取呈现出来。只不过我们的服务端一般都是浏览器,由于请求/响应都是互相看得懂的,所以序列化/反序列化方式一致。这里响应报文的反序列化和读取是浏览器自己做的。点击客户端的连接也算发起一次请求不一定要输入url

浏览器并不是一个传统意义上的“代理服务器”,但它确实在客户端角色之外,承担了一些“代理服务器”类似的职责。

HTTP 的请求方法

正常来说,服务器不可能暴露出很多方法的,这个对服务器本身不好,一般只会暴露GET/POST方法。如果只是访问静态网页,那我们是不需要设置get/post方法的,请求正文正是我们要向服务器发送的东西,我们希望得到服务器相关的应答,就比如我们输入密码账号就希望服务器可以做出判断,这种就属于交互式的http。这种网站叫交互式网站。

GET 方法

用途:用于请求 URL 指定的资源。

示例:GET /index.html HTTP/1.1

特性:指定资源经服务器端解析后返回响应内容。

GET方式提交参数时,浏览器会自动将提交的参数作为请求报头kv形式的添加到url的后面 /xxx?k=v,请求报头和路径之间是用?隔开的。

POST 方法

用途:用于传输实体的主体,通常用于提交表单数据。

示例:POST /submit.cgi HTTP/1.1

特性:可以发送大量的数据给服务器,并且数据包含在请求体中。

POST提交参数时,浏览器会自动将其提交到请求正文中。由于GET是之间添加在url里面的,所以对信息没有起到保护作用,所以GET通常用来获取网页,POST通常用来上传数据。这两个本质都是用户向服务器发信息,GET传参通过url,POST通过body。

更多的请求方法都不是很重要了。如果没有指定请求方法默认是GET。

HTTP 的状态码

我们可以对不同的请求情况进行分析从而设置此次请求是否合法合理的状态码,然后设置状态码通过响应结构体返回。

最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定 向), 504(Bad Gateway)

一下是常见的状态码和状态码描述

这种状态码描述以及码都是可以找到对应关系的,这种技术kv的关系,可以在网上找找看,不需要记。

HTTP 常见 Header

header就是请求/回响报头。

这些都可以在请求时填写,回应时自动根据请求的添加,所以请求报头和回应报头是基本一致的,都是可以设置的。

Content-Type指示请求体的内容类型,常用于 POST 或 PUT 请求。服务器返回的内容类型(如 HTML、JSON、XML 等)。主要是告诉服务器客户端发送的内容格式,帮助服务器正确解析请求体。像带了这个字段就不拍发送的正文被浏览器误解了,虽然浏览器有时候也可以自动识别正文内容。

Host用于填充主机地址,端口号对于浏览器来说不需要,必须包含在每个 HTTP/1.1 请求中,那搜索引擎是怎么知道域名(主机地址)的呢,因为每个服务器的地址域名都是保存在浏览器里面的,所以即使域名(地址)变更了搜索引擎也会内置这个变化。然后为了防止用户不知道新的域名是什么,浏览器会进行URL重定向,从旧的域名定向到新的域名,相当于访问旧的域名时直接指向跳转到了新的。

referer则相当于保留上此的访问记录。

User-Agent一般选择浏览器默认生成的。

Location

通常用于 重定向 响应,指示客户端应访问的 URL。如果在 HTTP 响应头中同时设置了 LocationHost,浏览器会根据 Location 头部的内容进行重定向,而不直接处理 Host 头部的变化。

HTTP 状态码 301(永久重定向)和 302(临时重定向)都依赖 Location 选项。以下 是关于两者依赖 Location 选项的详细说明: HTTP 状态码 301(永久重定向): • 当服务器返回 HTTP 301 状态码时,表示请求的资源已经被永久移动到新的位 置。 • 在这种情况下,服务器会在响应中添加一个 Location 头部,用于指定资源的新位 置。这个 Location 头部包含了新的 URL 地址,浏览器会自动重定向到该地址。

HTTP 状态码 302(临时重定向): • 当服务器返回 HTTP 302 状态码时,表示请求的资源临时被移动到新的位置。 • 同样地,服务器也会在响应中添加一个 Location 头部来指定资源的新位置。浏览 器会暂时使用新的 URL 进行后续的请求,但不会缓存这个重定向。

就是301是永久修改指向,302是临时的响应。

无论是 HTTP 301 还是 HTTP 302 重定向,都需要依赖 Location 选项来指定资 源的新位置。这个 Location 选项是一个标准的 HTTP 响应头部,用于告诉浏览器应该 将请求重定向到哪个新的 URL 地址。

关于 connection 报头

HTTP 中的 Connection 字段是 HTTP 报文头的一部分,它主要用于控制和管理客户 端与服务器之间的连接状态,也可以设置的。

• Connection: keep-alive:表示希望保持连接以复用 TCP 连接。(长链接)

• Connection: close:表示请求/响应完成后,应该关闭 TCP 连接。(短链接)

Connection 字段还用于管理持久连接(也称为长连接)。持久 连接允许客户端和服务器在请求/响应完成后不立即关闭 TCP 连接,以便在同一个连接 上发送多个请求和接收多个响应。 如果connect设置是keep-alive那就是长链接,位于长链接时TCP交互不会自动关闭,会一直保持开启状态,允许我们不断的发送请求,如果设置成close,就是短链接,在短链接下,我们只能交互一次,传输完后socket就自动关闭了,下次要传输时就得再次启动tcp服务。这个根一次访问量是没有关系的,重点差别是次数。

HTTP版本

填写格式,HTTP/x(x为版本号),这个x一般填写1.0,1.1,2.0

远程连接服务器工具

1。postman

Postman 是一个非常流行的 API 开发与测试工具,广泛用于 开发者测试人员 在开发 RESTful API 和其他 Web 服务时进行接口测试、调试和文档生成。Postman 提供了图形化界面,方便用户构造、发送 HTTP 请求,查看响应数据,以及对接口进行自动化测试。记得选免费版的

2。telnet

Telnet 是一种用于远程连接到另一台计算机的协议和工具,通常用于命令行界面(CLI)下的网络管理和故障排查。通过 Telnet,用户可以通过网络连接到远程计算机,执行命令,管理设备或访问服务。不过,Telnet 已经有些过时,很多现代网络中更推荐使用 SSH(Secure Shell)来代替,因为 SSH 更安全,使用加密技术保护数据传输。而 Telnet 的数据是以明文形式传输的,容易受到窃听。我觉得不是很好用,还是用上面那个吧,这个是属于Linux指令,直接我用过了。

setsockopt

setsockopt 函数是一个用于在套接字(socket)上设置选项的函数,它允许程序控制套接字的行为。这在网络编程中非常重要,尤其是在 TCP/IP 协议的套接字编程中。它通常用于设置一些影响套接字行为的参数,如缓冲区大小、超时、重试次数等。

如果服务器比客户端先退出了,就会出现短时间绑定同一个端口绑定不上的问题,当服务器退出时,TCP 连接会处于一个 TIME_WAIT 状态,等待足够的时间确保客户端收到确认消息。这段时间内,端口无法立即重新绑定给新的服务器实例,因为操作系统正在保护这个端口,以防止出现旧数据包的重传或延迟到达的情况。就是挥手的过程,我们后面再说。它的作用是配置套接字的行为,通过修改底层协议栈或操作系统对套接字的处理方式,来满足特定的需求。这个函数可以允许服务器快速重启,告别TIME_WAIT状态从而使同一个端口号被快速使用。

由于我们要处理的是端口的允许重用的问题所以选择SO_REUSEADDR(允许多个套接字绑定相同 IP + 端口(Linux 3.9+,用于多进程服务器),默认是开启的所以optval是1,就得到以下实现了:当然level也可以用IPPROTO_TCP,

int optval = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));  

相关文章:

应用层协议http(无代码版)

目录 认识URL urlencode 和 urldecode HTTP 协议请求与响应格式 HTTP 的请求方法 GET 方法 POST 方法 HTTP 的状态码 HTTP 常见 Header Location 关于 connection 报头 HTTP版本 远程连接服务器工具 setsockopt 我们来学习应用层协议http。 虽然我们说, 应用层协…...

8.5 Q1|广州医科大学CHARLS发文 甘油三酯葡萄糖指数累积变化与 0-3期心血管-肾脏-代谢综合征人群中风发生率的相关性

1.第一段-文章基本信息 文章题目:Association between cumulative changes of the triglyceride glucose index and incidence of stroke in a population with cardiovascular-kidney-metabolic syndrome stage 0-3: a nationwide prospective cohort study 中文标…...

交叉编译tcpdump工具

1.导出交叉编译工具链 export PATH$PATH:/opt/rockchip/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin 下载源码包libpcap-1.10.5,配置、并编译安装。 github仓库地址 ./configure --hostarm-linux CCarm-linux-gnueabihf-gcc --prefix$PWD/install …...

【Python-Day 20】揭秘Python变量作用域:LEGB规则与global/nonlocal关键字详解

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

golang 柯里化(Currying)

使用场景:参数在语义上属于不同组,Go 语法无法在单次调用中声明多组可变参数,通过柯里化可以实现分步接收参数。 有的参数是在不同时间段产生,使用Currying可以让函数记住(缓存)参数,避免应用代…...

无人机停机坪运行技术分析!

一、运行方式 1. 自动折叠与展开 部分停机坪采用二次折叠设计,通过传动组件实现自动折叠,缩小体积便于运输;展开后最大化停机面积,适应不同任务需求。例如,珠海双捷科技的专利通过两次折叠使停机坪体积最小化&#x…...

comfyui 工作流中 视频长度和哪些参数有关? 生成15秒的视频,再加上RTX4060 8G显卡,尝试一下

想再消费级显卡上生成15秒长视频,还是比较慢的,不过动漫的画质要求比较低 在ComfyUI中生成15秒视频需综合考虑视频参数配置、模型选择和硬件优化,尤其针对RTX 4060 8G显存的限制。 ⏱️ 一、影响视频长度的核心参数 总帧数(video_…...

【Java Web】速通HTML

参考笔记: JavaWeb 速通HTML_java html页面-CSDN博客 目录 一、前言 1.网页组成 1 结构 2 表现 3 行为 2.HTML入门 1 基本介绍 2 基本结构 3. HTML标签 1 基本说明 2 注意事项 4. HTML概念名词解释 二、HTML常用标签汇总 + 案例演示 1. 字体标签 font (1)定义 (2)案例 2…...

在线制作幼教早教行业自适应网站教程

你想知道怎么做自适应网站吗?今天就来教你在线用模板做个幼教早教行业的网站哦。 首先得了解啥是自适应网站。简单说呢,自适应网站就是能自动匹配不同终端设备的网站,像手机、平板、电脑等。那如何做幼早教自适应网站呢? 在乔拓云…...

WSL 开发环境搭建指南:Java 11 + 中间件全家桶安装实战

在WSL(Windows Subsystem for Linux)环境下一站式安装开发常用工具,能极大提升工作效率。接下来我将分步为你介绍如何在WSL中安装Java 11、Maven、Redis、MySQL、Nacos、RabbitMQ、RocketMQ、Elasticsearch(ES)和Node.…...

matlab天线阵列及GUI框架,可用于相控阵,圆形阵,矩形阵

构建天线阵列及GUI框架,可用于相控阵,圆形阵,矩形阵等 array/array.fig , 35384 array/array.m , 15582 array/circ_array.m , 5959 array/circular_array.m , 4238 array/fig8_5.m , 851 array/fig8_53.m , 441 array/fig8_7.m , 847 array/initialize…...

在 Ubuntu 终端中配置网络代理:优化 npm、apt等的下载速度

文章目录 背景步骤 1:测试网络连通性步骤 2:设置终端代理步骤 3:为 npm 配置代理步骤 4:为 apt 配置代理步骤 5:持久化代理设置注意事项总结 在开发中,网络环境有时会影响工具的下载速度,例如 …...

Apptrace:APP安全加速解决方案

2021 年,某知名电商平台在 “618” 大促期间遭遇 DDoS 攻击,支付系统瘫痪近 2 小时;2022 年,一款热门手游在新版本上线时因 CC 攻击导致服务器崩溃。观察发现,电商大促、暑期流量高峰和年末结算期等关键商业周期&#…...

Dockerfile 构建优化的方法

1.选择合适的 Base Image 使用轻量级基础镜像:尽量选择体积较小的基础镜像,例如 alpine 或 distroless。例如: FROM python:3.9-slim FROM alpine:3.14避免使用大型基础镜像:大型镜像会增加构建时间和镜像体积。 2. 减少镜像层数…...

Web攻防-SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错

知识点: 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-HTTP头&UA&Cookie 3、Web攻防-SQL注入-HTTP头&XFF&Referer 案例说明: 在应用中,存在增删改查数据的操作,其中SQL语句结构不一导致注入语句…...

Python中openpyxl库的基础解析与代码实例

目录 1. 前言 2. 安装openpyxl 3. 创建一个新的工作簿 4. 打开一个已有的工作簿 5. 读取和写入单元格 6. 操作工作表 7. 样式设置 8. 插入图像 9. 插入图表 10. 数据验证 11. 条件格式 12. 工作簿保护 13. 保存和关闭工作簿 14. 总结 1. 前言 在数据分析和处理的…...

GoldenDB管理节点zk部署

目录 1、准备阶段 1.1、部署规划 1.2、硬件准备 1.3、软件准备 1.4、网络端口开通 1.5、环境清理 2、实施阶段 2.1、操作系统配置 2.1.1、主机名修改 2.1.2、修改hosts文件 2.1.3、禁用防火墙 2.1.4、禁用selinux 2.1.5、禁用透明大页 2.1.6、资源限制调整 2.1.…...

mac mini m4命令行管理员密码设置

附上系统版本图 初次使用命令行管理员,让输入密码,无论是输入登录密码还是账号密码,都是错的,百思不得其解,去网上搜说就是登录密码啊 直到后来看到了苹果官方的文档 https://support.apple.com/zh-cn/102367 https…...

计算机网络之差错控制中的 CRC(循环冗余校验码)

文章目录 1 概述1.1 简介1.2 特点1.3 基本原则 2 实现步骤3 例题 1 概述 1.1 简介 CRC:Cyclic Redundancy Check(循环冗余校验)是计算机网络中常用的一种差错控制编码方法,用于检测数据传输或存储过程中可能出现的错误。 1.2 特…...

红客 Linux 系统性全解析

红客 Linux 系统性全解析:从工具到实战的网络安全防御体系 一、红客与 Linux 的深度关联 红客(Ethical Hacker)作为网络空间的守护者,其核心使命是通过模拟攻击行为发现系统漏洞,从而强化防御能力。Linux 操作系统因…...

【深度学习】7. 深度卷积神经网络架构:从 ILSVRC、LeNet 到 AlexNet、ZFNet、VGGNet,含pytorch代码结构

深度卷积神经网络架构:从 ILSVRC 到 AlexNet 在2012年Alex出现之前,主要还是依赖于SVM,同时数据工程成为分类任务中很大的一个部分,对数据处理的专家依赖性高。 一、ILSVRC 与图像分类任务背景 ILSVRC 简介 ILSVRC&#xff08…...

基于cornerstone3D的dicom影像浏览器 第二十七章 设置vr相机,复位视图

文章目录 前言一、VR视图设置相机位置1. 相机位置参数2. 修改mprvr.js3. 调用流程1) 修改Toolbar3D.vue2) 修改View3d.vue3) 修改DisplayerArea3D.vue 二、所有视图复位1.复位流程说明2. 调用流程1) Toolbar3D中添加"复位"按钮,发送reset事件2) View3d.vu…...

2025年渗透测试面试题总结-匿名[校招]高级安全工程师(代码审计安全评估)(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。、 目录 匿名[校招]高级安全工程师(代码审计安全评估) 渗透基础 1. 自我介绍 2. SQL注入写Shell(分数…...

Jenkins实践(7):Publish over SSH功能

在 Jenkins 中使用Publish over SSH功能,需要安装对应的插件。以下是详细步骤: 1. 安装 Publish over SSH 插件 进入 Jenkins 管理界面 → Manage Jenkins → Manage Plugins。切换到 Available 选项卡,搜索 "Publish Over SSH"。勾选插件并点击 Install without…...

SQLite 中文写入失败问题总结

SQLite 中文写入失败问题总结与解决方案 在 Windows 下使用 C 操作 SQLite 数据库时,中文字段经常出现 写入成功但内容显示为 BLOB 或 乱码 的问题。根本原因在于 SQLite 要求字符串以 UTF-8 编码 存储,而默认的 std::string 中文通常是 GB2312/ANSI 编…...

JavaScript篇:闭包:JavaScript中的魔法口袋,装下你的编程智慧

大家好,我是江城开朗的豌豆,一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术,并深入掌握Vue、React、Uniapp、Flutter等主流框架,能够高效解决各类前端开发问题。在我的技术栈中,除了…...

ubuntu系统安装Pyside6报错解决

目录 1,问题: 2,解决方法: 2.1 首先查看pypi是否有你需要包的镜像: 2.2 其它方案: 2.3 如果下载很慢,可以换源: 2.4 查看系统架构 Windows Ubuntu 1,问题&#xf…...

DeepSeek 赋能智能零售:从数据洞察到商业革新

目录 一、智能零售的现状与挑战二、DeepSeek 技术特点剖析2.1 基于 Transformer 架构的深度优化2.2 多源数据的深度分析能力2.3 强大的学习与推理能力 三、DeepSeek 在智能零售中的应用场景3.1 精准需求预测3.2 智能补货决策3.3 库存优化布局3.4 个性化推荐与营销3.5 智能客服与…...

榕壹云医疗服务系统:基于ThinkPHP+MySQL+UniApp的多门店医疗预约小程序解决方案

在数字化浪潮下,传统医疗服务行业正面临效率提升与客户体验优化的双重挑战。针对口腔、美容、诊所、中医馆、专科医院及康复护理等需要预约或诊断服务的行业,我们开发了一款基于ThinkPHP+MySQL+UniApp的多门店服务预约小程序——榕壹云医疗服务系统。该系统通过模块化设计与开…...

苏州SAP代理公司排名:工业园区企业推荐的服务商

目录 一、SAP实施商选择标准体系 1、行业经验维度 2、实施方法论维度 3、资质认证维度 4、团队实力维度 二、SAP苏州实施商工博科技 1、SAP双重认证,高等院校支持 2、以SAP ERP为核心,助力企业数字化转型 三、苏州使用SAP的企业 苏州是中国工业…...