【网络安全】Web安全基础 - 第二节:前置基础知识- HTTP协议,握手协议,Cookie及Session

本章节主要介绍一些基础知识 d(^_^o)

HTTP协议

什么是HTTP

超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。

HTTP是一个基于请求与响应,无状态的,应用层协议,常用语TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有WWW文件都必须遵守这个标准。

设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

HTTP工作流程

-客户端通过TCP三次握手与服务器建立简介

- TCP建立连接成功后,向服务器发送HTTP请求

-服务器收到HTTP请求后,向客户端发送http响应

-客户端通过TCP四次断开,与服务器断开TCP连接


什么是B/S、C/S架构

C/S(Client/Server)客户机和服务器结构

B/S(Browser/Server)浏览器和服务器结构

HTTP的持续连接机制

在HTTP 0.9和1.0中,TCP连线在每一次请求/回应对之后关闭

在HTTP 1.1中,引入了保持连线的机制,一个连接可以重复在多个请求/回应使用。

持续连线的方式可以大大减少等待时间,因为在发出第一个请求后,上方不需要重新运行TCP握手程序。

统一资源定位符(URL)

URL(统一资源定位符):我们常说的网址,包含了用于查找资源的足够信息,而一个完整的URL包含下面几部分:

协议方案名:http,ftp,file,mailto,telnet,ldap……

登陆信息(可选项):如果网页需要认证时,需要填写该参数

服务器地址:可以使用IP地址形式,也可能是能被DNS解析为IP地址的域名形式

端口号(可选项):指定服务器连接的端口号,不填写则指向文本协议的默认端口号

带层次的文件路径:获取资源在服务器中的具体地址

查询字符串(可选项):针对已指定路径的资源,可以使用查询字符串来获取想要的参数

片段标识符:信息片段字符串,用来标记已获取资源中的子资源(在文档中的某个位置)

一个完整的URL通常包含以下部分:
协议(Protocol)
它告诉浏览器或客户端应该使用哪种方式来获取资源。常见的协议有http://(超文本传输协议)和https://(安全超文本传输协议)。这里的“://”是协议和主机名之间的分隔符。
主机名(Hostname)
也就是网站的域名或IP地址,比如www.example.com或192.168.1.1。这个部分指明了资源所在的服务器。
端口(Port)
端口号用于标识在同一台服务器上的不同服务。虽然很多服务都使用默认的端口号(如HTTP的80端口,HTTPS的443端口),但也可以自定义端口号。端口号紧跟在主机名之后,用冒号:分隔。
路径(Path)
路径指明了服务器上资源的具体位置。它由一系列的目录和文件名组成,用斜杠/分隔。例如,在URL http://www.example.com/images/logo.png中,/images/logo.png就是路径部分。
查询参数(Query Parameters)
查询参数用于向服务器传递额外的信息。它们以?开头,后面跟着一个或多个键值对(key-value pairs),每个键值对之间用&分隔。例如,在URLhttp://www.example.com/search?q=hello&page=2中,q=hello&page=2就是查询参数部分。
锚点(Fragment)
锚点用于标识页面内的某个位置。它以#开头,后面跟着一个标识符。浏览器在加载页面时,会滚动到该标识符所在的位置。锚点通常用于页面导航或突出显示某个特定的部分。

统一资源标志符(URI)

URI(统一资源标志符)用来标识抽象或物理资源的一个紧凑字符串

HTTP是基于客户端/服务器(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议

HTTP使用统一资源标识符来传输数据和建立连接

URI和URL的区别:URL是URI的一个子集

客户端请求消息

HTTP请求报文:Web客户端向服务器发送的请求

HTTP请求由四个部分组成:请求行、请求头部、空行、请求数据


请求行包含了三个部分:方法字段、URL字段和HTTP协议版本字段。它们之间用空格隔开。比如“GET /data/info.html HTTP/1.1”。这里,GET就是请求方法,/data/info.html是请求的URL,而HTTP/1.1则是HTTP协议版本

请求方法:

·GET:请求获取Request-URI所标识的资源,这是最常见的方法,通常用来请求数据

·POST:在Request-URI所标识的资源后附加新的数据,用于向指定资源提交数据进行处理请求

·HEAD:请求获取由Request-URI所标识的资源响应消息报头,只返回响应头信息,不返回实体内容,通常用于检查是否有效

·PUT:请求服务器存储一个资源,并用Request-URI做为其标识,通常用于上传文件或更新资源

·DELETE:请求服务器删除Request-URI所标识的资源

·TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断

·OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

·CONNECT:保留将用来使用 HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器

·PATCH:用于将局部修改应用到资源(由 RFC 5789指定的方法)

接下来是请求头部:
请求头部是由一系列的关键字/值对组成的,每行一对,关键字和值之间用冒号“:”分隔。比如“Accept: text/html”,表示浏览器期望接收到的响应内容类型是HTML。常见的请求头还包括“User-Agent”(产生请求的浏览器类型)、“Host”(请求的主机名)等等。

客户端请求消息:

Host:指定请求的服务器的域名和端口号(Host必须包含,其他都是可选的)

Content-Length:请求的内容长度,用于告知服务器请求体的字节长度,仅当请求方法(如POST,PUT)包含这个请求体时才需要

Accept:指定客户端能够接受的内容类型

X-Requested-With:Ajax异步请求,这个字段是非标准的,但他被广泛用于区分普通页面请求和Ajax请求

User-Agent:包含发出请求的用户信息,通常包括浏览器的名称、版本、操作系统等信息,服务器可以根据这个字段来适配不同的浏览器或设备

Content-Type:请求的与实体对应的MIME信息,这个字段用于告知服务器请求的媒体类型

Origin:指明当前请求来自于哪个站点,常用于检查请求的源是否合法

Referer:先前网页的地址,当前请求网页紧随其后,常用于服务器记录用户的访问来源,也可以用于防盗链等安全策略

Accept-Encoding:指定浏览器浏览器可支持的Web服务器返回内容压缩编码类型

Accept-Language:浏览器可接受的语言

Cookie:HTTP发送请求时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。这样服务器就能识别出用户的身份,并为用户返回个性化的内容

Connection:表示是否需要持久连接

然后是空行:
空行在请求头部和请求数据之间,用于分隔它们。这个空行是必须的,用来告诉服务器请求头部已经结束,接下来是请求数据(如果有的话)。

最后是请求数据:
请求数据也被称为请求包体或请求正文。它包含客户端发送给服务器的具体数据,比如表单数据、文件上传等。对于GET请求来说,请求数据通常附加在URL后面,而对于POST请求,请求数据则包含在请求包体中。

服务器响应消息

HTTP响应报文:在接收和解释请求消息后,服务器返回一个HTTP响应消息,它包含了服务器对请求的处理结果、资源内容等信息。

HTTP响应也由四个部分组成:状态行,消息报头,空行,响应正文


状态行(Status Line)
格式示例:HTTP/1.1 200 OK
包含三个元素:
HTTP版本:与请求消息中的版本相匹配,例如HTTP/1.1。
状态码:三位数,表示请求的处理结果,如200表示成功,404表示未找到资源。
状态信息:状态码的简短描述,如OK。

状态码:状态码由三位数字组成,第一个数字定义了相应的类别,有五种可能取值

·1xx:指示信息--请求已被服务器接收,继续处理

·2xx:成功--请求已经成功被服务器接收、理解、并接受

·3xx:重定向--需要后续操作才能完成这一请求

·4xx:客户端错误--请求有语法错误或无法实现

·5xx:服务端错误--服务器在处理某个正确的请求时发生错误

消息报头(Headers)
包含了服务器环境信息、响应体的大小、服务器支持的压缩类型等。
常见的响应头包括Content-Type、Content-Length、Server、Set-Cookie等。
例如,Content-Type指定了MIME类型的HTML(text/html),编码类型是UTF-8。

空行(Blank Line)
消息报头后面的空行是必须的,用来通知客户端响应头部至此结束。
同时也是用来分隔响应头部与响应体。

响应正文(Body)
服务器返回给客户端的文本信息,即实际请求的资源内容。
在HTML页面中,空行后面的html部分为响应正文。

Cookie/Session简介

HTTP是一个基于请求与响应,无状态的,应用层的协议。

无状态:服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现

Cookie:网站为了辨别用户身份,存储在用户本地终端上的数据—Cookie是由服务器生成的,发送给客户端(通常是浏览器)的。

Cookie总是保存在客户端中,按客户端中的存储位置,可分为会话Cookie和硬盘Cookie:

会话Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的;

硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。

Cookie的根本作用是在客户端存储用户访问网站的一些信息:

1.记住密码,下次自动登录;

2.购物车功能;

3.记录用户浏览数据,进行商品(广告)推荐等

缺陷:

1.Cookie会被附加在每个HTTP请求中,无形中增加了流量;

2.由于在HTTP请求中的Cookie是明文传递的,所以安全性成了问题(除非用HTTPS);

3.Cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的

Cookie工作原理:

设置Cookie
当用户首次访问某个网站时,服务器会在HTTP响应的头部信息中设置一个名为Set-Cookie的字段。这个字段包含了Cookie的名称、值以及其他可选属性,比如过期时间、路径、域等。
例如,服务器可能会发送一个名为sessionID的Cookie,用于识别用户的会话。
浏览器保存Cookie
浏览器接收到服务器的Set-Cookie字段后,会将这个Cookie信息保存在本地。具体保存的位置可能是浏览器的缓存文件夹或特定的Cookie文件中。
每个网站都有自己的Cookie存储,不同网站之间的Cookie是相互隔离的。
发送Cookie
当用户再次访问同一个网站时,浏览器会在HTTP请求的头部中添加一个名为Cookie的字段,这个字段包含了用户之前保存的所有Cookie信息。
这样,服务器就能够根据Cookie中的信息来识别用户,并提供个性化的服务。
读取Cookie
服务器接收到带有Cookie字段的请求后,会解析这个字段,提取出其中的Cookie信息。
根据这些信息,服务器可以判断用户的身份、偏好等,并根据需要返回相应的内容。
更新Cookie
在一次会话中,服务器可能会根据用户的操作更新Cookie的值或属性。
例如,当用户在购物网站中添加商品到购物车时,服务器可以更新购物车对应的Cookie,以便在下次访问时能够恢复购物车中的商品。

Session:

Session的根本作用就是在服务器端存储用户和服务器会话的一些信息

1.判断用户是否登陆

2.购物车功能等

Session工作原理:

当用户访问到一个服务器,如果服务器启用Session,服务器就要为该用户创建一个SESSION,并生成一个与此SESSION相关的SESSION ID,这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串,这个ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器

Cookie和Session的区别:

1.存放位置不同:Cookie存放在客户端,Session保存在服务端

2.存取方式不同:Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或二进制数据,需求先进行编码;Session中能够存取任何类型的数据

3.安全性不同:Cookie存储在浏览器上,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容;Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20525.shtml

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

相关文章

100.网络游戏逆向分析与漏洞攻防-ui界面的设计-聊天功能的界面与设计

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 现在的代码都是依据数据包来写的,如果看不懂代码,就说明没看懂数据包…

Git常用命令1

1、设置用户签名 ①基本语法: git config --global user.name 用户名 git config --global user.email 邮箱 ②实际操作 ③查询是否设置成功 cat ~/.gitconfig 注:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…

MulterError: Field name missing 报错解决

Request POST /FileUpload/chunkApi/upload/mProjectNews/Images failed with status code 500. MulterError: Field name missing. 原因:Multer是基于Busboy解析的表单参数信息,经定位发现是解析表单中文本参数时出现了null,故收到MISSION_…

【算法】模拟算法——数青蛙(medium)

题解:模拟算法——数青蛙(medium) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接:LINK 2.题解 用循环进行遍历, 如果该字符为o\o\a\k 找一下前驱字符是否存在 如果存在,前驱字符–,该字符如果不存在&#x…

CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲面的宏录制到二次开发案例

目录 引出vb.net和vb6.0 进程外开发环境搭建vb.net开发环境搭建《CATIA二次开发技术基础》模板 添加宏库引用 vs开发环境初步vs中的立即窗口对象浏览器 建立模板案例:创建一堆圆柱曲面第一步:录制宏第二步:代码精简第三步:for循环…

⌈ 传知代码 ⌋ 命名实体识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

提升B端图表设计技能:教程分享

图表是数据可视化的常用表现形式,是对数据的二次加工,可以帮助我们理解数据、洞悉数据背后的真相,让我们更好地适应这个数据驱动的世界。本期就来带大家学习图表的设计及构成,帮助大家更好的理解图表设计。 设计教程源文件http:/…

OpenAI已全面开放自定义GPT以及文件上传等功能

今天,OpenAI兑现了前段时间做出的承诺:免费向所有用户开放GPT-4o。这意味着所有的免费用户都能使用自定义GPT模型、分析图表等其他GPT-4o新功能了。现在ChatGPT界面长这样: 可以看出,免费用户也能使用GPT store中定义好的模型&…

Python开发与应用实验1 | 开发环境安装配置

*本文来自博主对专业课 Python开发与应用 实验部分的整理与解析。 *一些题目可能会增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人的补充,以便各位学习参考。 *实验环境为:Python 3.10 &#xf…

java实现地形dem产汇流流场数据提取解析

一、基础概念 在GIS和气象学、海洋学、大气科学、水文学等领域,"提取流场"通常指的是从数据集中识别和分析流体(如水流、风场、洋流、大气流)的运动模式和流向的过程。这个过程涉及数据处理、可视化和分析技术,下面是提…

Wpf 使用 Prism 实战开发Day31

登录数据绑定 1.首先在LoginViewModel 登录逻辑处理类中&#xff0c;创建登录要绑定属性和命令 public class LoginViewModel : BindableBase, IDialogAware {public LoginViewModel(){ExecuteCommand new DelegateCommand<string>(Execure);}public string Title { ge…

vue-标签选择

效果 选中后 代码 <span :class"[item.bealtrue?p_yx_span span_active :span p_yx]" click"onTagSelect(index)" v-for"(item,index) in tagList" :key"index" >{{item.name}} </span> // 列表值 tagList:[ {id: 1, na…

R语言ggplot2包绘制世界地图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 1. 数据读取与处理 首先&#xff0c;从CSV文件中读取数据&#xff0c;并计算各国每日收入的平均签证成本。 library(tidyverse) ​ df <- read_csv("df.csv") %>% group_…

PostgreSQL基础(六):PostgreSQL基本操作(二)

文章目录 PostgreSQL基本操作(二) 一、字符串类型 二、日期类型 三、

基于分步傅立叶数值算法的一维非线性薛定谔方程求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于分步傅立叶数值算法的一维非线性薛定谔方程求解matlab仿真. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ........................…

今天,组长和研发总监吵起来了 ...

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

下载HF AutoTrain 模型的配置文件

下载HF AutoTrain 模型的配置文件 一.在huggingface上创建AutoTrain项目二.通过HF用户名和autotrain项目名,拼接以下url,下载模型列表(json格式)到指定目录三.解析上面的json文件、去重、批量下载模型配置文件(权重以外的文件) 一.在huggingface上创建AutoTrain项目 二.通过HF用…

Flutter中如何让Android的手势导航栏完全透明?

Flutter 开发中 安卓机器都有 像ios 的手势操作栏&#xff0c; 也就是屏幕底下的 那条线。 但这条线默认是有颜色的 &#xff08;像下面这样&#xff09; 一、全屏幕方式 void main() {// 全屏沉浸式SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []…

Vxe UI vxe-upload 上传组件,显示进度条的方法

vxe-upload 上传组件 查看官网 https://vxeui.com 显示进度条很简单&#xff0c;需要后台支持进度就可以了&#xff0c;后台实现逻辑具体可以百度&#xff0c;这里只介绍前端逻辑。 上传附件 相关参数说明&#xff0c;具体可以看文档&#xff1a; multiple 是否允许多选 li…

JDBC常见异常(4)—No suitable driver found for url

异常代码 表示Java程序在尝试连接到Oracle数据库时&#xff0c;没有找到合适的JDBC驱动程序。 java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:localhost:1521:ORCL异常分析 根据异常的字面意思&#xff0c;大概可以分析原因 这通常是因为驱动程序…