网络编程 http 相关基础概念
文章目录
- 表单是什么
- http请求是什么
- http请求的结构和说明
- 关于http方法 GET和POST区别
- http常见状态码
- http响应
- http 请求是无状态的含义
- html是什么 (前端内容,了解即可)
- html 常见标签 (前端内容,了解即可)
- 关于长链接和短链接
- 永久重定向与临时重定向
- 什么是http会话
- 什么是http会话管理
- http会话管理实现方式
- 关于浏览器cookie
- session 会话管理安全方案
表单是什么
HTTP表单是一种用于在Web应用程序中收集用户输入数据的机制。它由HTML表单元素和HTTP请求组成。
HTML表单元素(如、、等)用于创建用户界面,让用户输入数据。用户可以在表单中填写文本、选择选项、上传文件等。
当用户提交表单时,浏览器会将表单数据封装在HTTP请求中,并发送给服务器。这个过程通常使用POST请求方法,但也可以使用GET请求方法。
HTTP请求中的表单数据以键值对的形式发送,其中键是表单元素的名称,值是用户输入的数据。服务器接收到请求后,可以解析表单数据,并根据需要进行处理,比如存储到数据库、发送电子邮件等。
HTTP表单在Web开发中非常常见,用于实现各种功能,如用户注册、登录、搜索、提交评论等。开发人员可以使用服务器端的编程语言(如PHP、Python、Java等)来处理表单数据,并根据业务逻辑进行相应的操作。
需要注意的是,由于HTTP是无状态的协议,每次提交表单时,服务器都会处理一个独立的请求。如果需要在多个请求之间保持用户的状态,可以使用会话(session)或其他机制来实现。
http请求是什么
HTTP请求是客户端向服务器发送的一种请求,用于获取特定资源或执行特定操作。HTTP请求由请求行、请求头和请求体组成。
请求行包含了请求的方法、URL和协议版本。常见的请求方法包括GET、POST、PUT、DELETE等,用于指定请求的目的和操作类型。URL表示请求的资源路径,协议版本表示使用的HTTP协议版本。
请求头包含了一些附加的信息,用于描述请求的属性和要求。常见的请求头包括Host、User-Agent、Content-Type等。
请求体包含了一些可选的数据,用于传输请求的参数或内容。请求体通常用于POST请求或其他需要传输数据的请求方法。请求体的格式和内容根据具体的请求类型和服务器要求而定。
当客户端发送HTTP请求时,它会将请求发送到指定的服务器,并等待服务器的响应。服务器接收到请求后,会根据请求的内容和要求进行相应的处理,并返回一个HTTP响应给客户端。
需要注意的是,HTTP请求是无状态的,每个请求都是独立的,服务器不会保留之前请求的状态信息。如果需要在多个请求之间保持状态,可以使用会话(session)或其他机制来实现。
http请求的结构和说明
Host:指定请求的目标服务器的主机名或IP地址。
User-Agent:指定发送请求的客户端应用程序的信息,包括名称、版本号等。
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;(页面跳转,重定向)
Accept:指定客户端能够处理的响应内容类型,用于告诉服务器客户端期望接收的数据格式。
Content-Type:指定请求体中的数据类型,用于告诉服务器请求体的格式。
Content-Length:指定请求体的长度,用于告诉服务器请求体的大小。
Authorization:用于在请求中发送身份验证凭据,比如用户名和密码。(没见过)
Cookie:用于在请求中发送之前服务器发送的Cookie,用于保持会话状态。
Referer:指定当前请求的来源URL,用于告诉服务器请求是从哪个页面跳转过来的。
If-Modified-Since:用于条件请求,指定自从指定日期后,资源是否有修改,如果没有修改,服务器将返回304 Not Modified。(没见过)
Cache-Control:指定请求或响应的缓存行为,用于控制缓存的行为。
Origin:指定请求的来源,用于跨域请求时进行验证。
X-Requested-With:指定请求是通过Ajax发送的,用于标识请求的类型。(没见过)
关于http方法 GET和POST区别
参数位置:
GET方法:参数以查询字符串的形式附加在URL的末尾,例如http://example.com/page?param1=value1¶m2=value2
POST方法:参数包含在请求的消息体中,不会显示在URL中。
数据传输方式:
GET方法:将参数以明文形式附加在URL上,数据会暴露在浏览器的历史记录、日志文件等中,传输数据量有限。
POST方法:将参数放在请求的消息体中,不会暴露在URL中,可以传输大量数据。
安全性:(私密性更贴切)
GET方法:因为参数暴露在URL中,所以不适合传输敏感信息,如密码等。
POST方法:参数不会暴露在URL中,适合传输敏感信息。
缓存:
GET方法:可以被缓存,浏览器会缓存GET请求的结果,下次请求相同的URL时可以直接使用缓存的结果。
POST方法:默认情况下不会被缓存,每次请求都会发送给服务器。
幂等性:
GET方法:幂等,多次相同的GET请求会返回相同的结果,不会对服务器产生副作用。
POST方法:非幂等,多次相同的POST请求可能会对服务器产生副作用,如插入一条新的记录。
http常见状态码
HTTP状态码是服务器在响应客户端请求时返回的一个三位数字代码,用于表示请求的处理结果。常见的HTTP状态码有以下几类:
1xx - 信息性状态码:表示请求已被接收,继续处理。
100 - Continue:服务器已接收到请求的初始部分,客户端应继续发送剩余的请求。
101 - Switching Protocols:服务器已理解客户端的请求,并将切换到不同的协议进行处理。
2xx - 成功状态码:表示请求已成功被服务器接收、理解和处理。
200 - OK:请求成功,返回的实体内容作为响应的主体。
201 - Created:请求已成功,并在服务器上创建了新的资源。
204 - No Content:请求成功,但响应报文不含实体主体部分。
3xx - 重定向状态码:表示需要进一步操作才能完成请求。
301 - Moved Permanently:请求的资源已永久移动到新位置,需要更新请求的URL。
302 - Found:请求的资源暂时移动到新位置,客户端应继续使用原有的URL。
304 - Not Modified:客户端发送的请求资源未修改,可以使用缓存的版本。
4xx - 客户端错误状态码:表示客户端发送的请求有错误。
400 - Bad Request:服务器无法理解客户端的请求,语法错误。
401 - Unauthorized:请求需要用户身份验证。
404 - Not Found:请求的资源不存在。
5xx - 服务器错误状态码:表示服务器在处理请求时发生了错误。
500 - Internal Server Error:服务器内部错误,无法完成请求。
503 - Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。
http响应
首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在
body中.
http 请求是无状态的含义
HTTP会话是无状态的意思是每个HTTP请求都是独立的,服务器不会保存客户端的状态信息。每个请求都是独立的事务,服务器无法识别一个请求是否来自同一个客户端。这是由于HTTP协议的设计决定的。
004 html表单 代码创建简单示范(前端内容,了解即可)
<!DOCTYPE html>
<html>
<head><title>HTTP表单示例</title>
</head>
<body><form method="POST" action="/submit"><label for="name">姓名:</label><input type="text" id="name" name="name" required><br><br><input type="submit" value="提交"></form>
</body>
</html>
使用元素创建了一个表单。
method属性指定了请求方法,这里使用的是POST方法
。action属性指定了表单数据提交的URL,这里是/submit。
在表单中,使用
html是什么 (前端内容,了解即可)
HTML(Hypertext Markup Language)是一种用于创建网页的标记语言。它由一系列的标签(tag)组成,每个标签用于定义网页中的元素和结构。
HTML通过使用标签来描述网页的结构和内容。每个HTML标签都由尖括号包围,如。标签通常是成对出现的,包括一个开始标签和一个结束标签,开始标签以的形式表示,结束标签以的形式表示。开始标签和结束标签之间可以包含文本内容或其他嵌套的标签。
HTML是一种标记语言,它不负责控制网页的样式和交互行为.
html 常见标签 (前端内容,了解即可)
常见的HTML标签示例:
:定义HTML文档的根元素。 :定义文档头部区域,包含元数据和链接引用。关于长链接和短链接
长链接(Long Link)和短链接(Short Link)是两种不同的URL形式,用于在互联网上引用和访问资源。
长链接是完整的URL,包含协议、主机名、路径和其他参数。它通常是一个描述性的、易读的链接,可以清晰地表示资源的位置和路径。例如:https://www.example.com/article/how-to-create-a-website。
短链接是对长链接进行缩短的URL,通常只包含一个短的、随机生成的字符序列。短链接的目的是将长而复杂的链接转换为短小简洁的形式,方便在限制字符数量的场景下使用,如社交媒体平台、短信等。例如:https://bit.ly/2xGh3k.
短链接服务通常由第三方提供,用户可以将长链接输入到短链接服务中,然后获取一个对应的短链接。当用户点击短链接时,会被重定向到原始的长链接地址。
永久重定向与临时重定向
永久重定向(Permanent Redirect)和临时重定向(Temporary Redirect)是HTTP中用于指示资源已被移动或临时不可用的两种重定向方式。
永久重定向使用HTTP状态码301 Moved Permanently来表示,它告诉客户端请求的资源已永久移动到新的位置。客户端在接收到永久重定向的响应后,会自动将之后的请求重定向到新的URL。搜索引擎也会将旧的URL替换为新的URL,以确保搜索结果的准确性和一致性。
临时重定向使用HTTP状态码302 Found(或307 Temporary Redirect)来表示,它告诉客户端请求的资源暂时移动到新的位置。客户端在接收到临时重定向的响应后,会自动将之后的请求重定向到新的URL。与永久重定向不同,搜索引擎会继续保留旧的URL,并在后续请求中重新检查。
永久重定向和临时重定向都是通过HTTP响应头中的Location字段来指定重定向的目标URL。服务器在发送重定向响应时,会将目标URL包含在Location字段中,客户端在接收到重定向响应后会自动进行重定向操作。
什么是http会话
在HTTP会话中,客户端和服务器之间进行请求和响应的交互。
什么是http会话管理
HTTP会话管理是指在HTTP协议中,通过一系列机制来管理和维护会话状态的过程。由于HTTP协议本身是无状态的,服务器无法自动识别一个请求是否来自同一个客户端,也无法跟踪和管理会话状态。因此,为了实现会话管理,需要使用额外的机制。
简易的理解:维持连续http会话的方法 。
http会话管理实现方式
HTTP会话管理是指在HTTP协议中,通过一系列机制来管理和维护会话状态的过程。由于HTTP协议本身是无状态的,服务器无法自动识别一个请求是否来自同一个客户端,也无法跟踪和管理会话状态。因此,为了实现会话管理,需要使用额外的机制。
以下是一些常见的HTTP会话管理机制:
Cookie:Cookie是一种在客户端存储会话信息的机制。服务器可以通过在HTTP响应中设置Set-Cookie头部来将会话标识或其他会话相关信息发送给客户端,客户端会将这些信息存储在本地,并在后续的请求中通过Cookie头部将这些信息发送回服务器。服务器可以根据Cookie中的信息来识别和管理会话状态。
Session:Session是一种在服务器端存储会话信息的机制。服务器在接收到客户端的请求后,会为该客户端创建一个唯一的会话标识,并将会话相关的信息存储在服务器端的内存或持久化存储中,例如数据库或缓存中。服务器通过在响应中返回一个包含会话标识的Cookie来将会话标识发送给客户端。客户端在后续的请求中通过Cookie头部将会话标识发送回服务器,服务器根据会话标识来获取和管理会话状态。
Token:Token是一种在客户端存储会话信息的机制,常用于无状态的API认证和授权。服务器在认证成功后,会生成一个包含用户身份信息和其他相关信息的Token,并将Token发送给客户端。客户端在后续的请求中通过在请求头或请求参数中携带Token来进行认证和授权。服务器通过验证Token的合法性和有效性来管理会话状态。
关于浏览器cookie
edge浏览器在设置中查看cookie设置
Cookie文件是存储在客户端(通常是Web浏览器)上的文本文件,用于在HTTP会话中跟踪和管理用户的会话状态信息。当服务器通过HTTP响应中的Set-Cookie头部将Cookie信息发送给客户端时,客户端会将这些信息存储在Cookie文件中。在后续的请求中,客户端会将Cookie文件中的信息通过Cookie头部发送回服务器,以便服务器能够识别和管理会话状态。
session 会话管理安全方案
相关文章:

网络编程 http 相关基础概念
文章目录 表单是什么http请求是什么http请求的结构和说明关于http方法 GET和POST区别http常见状态码http响应http 请求是无状态的含义html是什么 (前端内容,了解即可)html 常见标签 (前端内容,了解即可)关于…...
LatexEasy公式渲染教程
LatexEasy使用简单的URL渲染公式为图片 https://r.latexeasy.com/image.svg?1-sin^2(x) 使用单个HTML图像标签将公式添加到任何现有网站 <img src"https://r.latexeasy.com/image.svg?1-sin^2(x)" />...

十年测试工程师叙述自动化测试学习思路
自动化测试介绍 自动化测试(Automated Testing),是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架,编写自动化测试用例,来模拟手工测试过程。比如说,在项目迭代过程中,持…...

SpringAOP详解(下)
proxyFactory代理对象创建方式和代理对象调用方法过程: springaop创建动态代理对象和代理对象调用方法过程: 一、TargetSource的使用 Lazy注解,当加在属性上时,会产生一个代理对象赋值给这个属性,产生代理对象的代码为…...
主流软件漏洞跟踪 Apache RocketMQ NameServer 远程代码执行漏洞(CVE-2023-37582)
主流软件漏洞跟踪 Apache RocketMQ NameServer 远程代码执行漏洞(CVE-2023-37582) 漏洞描述影响版本安全版本如何修复可供参考的资料主流软件漏洞跟踪 Apache RocketMQ NameServer 远程代码执行漏洞(CVE-2023-37582) CVE编号 : CVE-2023-37582 利用情况 : EXP 已公开 …...

Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并
效果如图,姓名 数值1 字段进行自动合并 封装合并列js - tableMerge.js // 获取列合并的行数 // params // tableData: 表格数据 // mergeId: 合并的列的字段名 export const tagRowSpan (tableData, mergeId) >{const tagArr [];let pos 0;tableData.map((i…...

C++标准库STL容器详解
目录 C标准模板库STL容器容器分类容器通用接口 顺序容器vectorlistdeque 容器适配器queuestackpriority_queue 关联容器:红黑树setmultisetmapmultimap 关联容器:哈希表unordered_set和unordered_multisetunordered_map和unordered_multimap 附1…...
ParNew垃圾收集器(Serial+多线程)是干什么用的?
在Java中,ParNew垃圾收集器是一种垃圾收集算法,它是Serial垃圾收集器的多线程版本。它主要用于新生代(Young Generation)的垃圾收集。新生代是Java堆内存的一部分,主要用于存放新创建的对象。 ParNew垃圾收集器的设计目标是在多核CPU上并行地…...

【Android】AES解密抛出异常Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH
Java使用AES加密的时候没得问题,但是在解密的时候就出错了,一起来找找原因吧。 首先,Java运行的代码如下,使用AES加解密 Cipher cipher Cipher.getInstance("AES/CBC/NOPadding"); //...主要问题 可调试运行控制台抛…...
菜鸟教程《Python 3 教程》笔记(2):数据类型转换
菜鸟教程《Python 3 教程》笔记(2) 2 数据类型转换2.1 隐式类型转换2.2 显式类型转换2.2.1 int() 函数2.2.2 repr() 函数2.2.3 frozenset ()函数 2 数据类型转换 出处:菜鸟教程 - Python3 数据类型转换 Python 数据类型转换可以分为2种&…...

JVM运行时参数查看
常用命令查找文档站点:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html -XX:PrintFlagsInitial 输出所有参数的名称和默认值,默认不包括Diagnostic和Experimental的参数。可以配合 -XX:UnlockDiagnosticVMOptions和-XX:UnlockEx…...

每日一题:leetcode 1267 统计参与通信的服务器
这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…...

Unity打包Windows程序,概率性出现无法全屏或分辨率不匹配
排除代码和Resolution and Presentation面板设置问题 如果程序还是不能按照预期的分辨率运行,应该是系统注册表记录了对应的设置。 解决方案: 打开注册表,使用快捷键“Win” "R"组合快捷键。在打开后面键入命令:Rege…...

消息中间件 介绍
MQ简介 MQ,Message queue,消息队列,就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等,用来保存数据的。当然,与数据库、缓存等产品比较,也有自己一些特点,具体的特点后文会做详细的介绍。 现在常用…...
JAVA-字符串长度
给定一行长度不超过 100 的非空字符串,请你求出它的具体长度。 输入格式 输入一行,表示一个字符串。注意字符串中可能包含空格。 输出格式 输出一个整数,表示它的长度。 数据范围 1≤字符串长度≤100 字符串末尾无回车 输入样例: …...

[oneAPI] 基于BERT预训练模型的SWAG问答任务
[oneAPI] 基于BERT预训练模型的SWAG问答任务 基于Intel DevCloud for oneAPI下的Intel Optimization for PyTorch基于BERT预训练模型的SWAG问答任务数据集下载和描述数据集构建问答选择模型训练 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d…...

如何为winform控件注册事件
有很多winform的初学者不知道如何为winform注册的事件代码,本篇博文就是以button控件为例子,为winform注册单击事件,如下: 1、新建一个winform 以visual studio 2019 社区版为例子,新建一个winform程序,如下: 关于visual studio 2019 社区版下载方式点击这里:手把手教…...

【LeetCode-面试经典150题-day15】
目录 104.二叉树的最大深度 100.相同的树 226.翻转二叉树 101.对称二叉树 105.从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树 117.填充每个节点的下一个右侧节点指针Ⅱ 104.二叉树的最大深度 题意: 给定一个二叉树 root ,返回其…...
git查看和修改项目远程仓库地址
git查看和修改项目远程仓库地址 一、背景 项目代码仓库迁移,需要本地更新远程仓库地址,进行代码同步与提交。 二、查看项目的远程仓库地址 # 查看远程地址 git remote -v # 查看远程仓库信息(分支、地址等) git remote show origin三、修…...

JavaWeb 速通JSON
目录 一、JSON快速入门 1.基本介绍 : 2.定义格式 : 3.入门案例 : 二、JSON对象和字符串的相互转换 1.常用方法 : 2.应用实例 : 3.使用细节 : 三、JSON在Java中的使用 1.基本说明 : 2.应用场景 : 2.1 JSON <---> JavaBean 2.2 JSON <---> List 2.3 JSON …...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...