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

news2025/6/3 14:05:26

目录

认识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://www.coloradmin.cn/o/2393109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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 中文标…

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

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

【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…

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

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

Apptrace:APP安全加速解决方案

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

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

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

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 特…

【深度学习】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 编…

ubuntu系统安装Pyside6报错解决

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

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

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

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

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

数据结构中无向图的邻接矩阵详解

在计算机科学的浩瀚宇宙中,数据结构无疑是那把开启高效编程大门的关键钥匙。对于计算机专业的大学生们来说,数据结构课程是专业学习路上的一座重要里程碑,而其中的图结构更是充满魅力与挑战,像一幅神秘的画卷等待我们去展开。今天…

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 目录 .NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 一、背景与技术概述 1.1 AOT 编译技术简介 1.2 Go 语言与 .NET 的互补性 二、.NET 7 AOT 编译实践 2.1 环境准备 2.2 创建 AOT 项目 2.3 AOT 编译流程 2.4 调试信息处…

OpenCV 第7课 图像处理之平滑(一)

1. 图像噪声 在采集、处理和传输过程中,数字图像可能会受到不同噪声的干扰,从而导致图像质量降低、图像变得模糊、图像特征被淹没,而图像平滑处理就是通过除去噪声来达到图像增强的目的。常见的图像噪声有椒盐噪声、高斯噪声等。 1.1 椒盐噪声 椒盐噪声(Salt-and-pepper N…