网络安全——浅谈HTTP协议

news/2024/12/3 6:01:32/

HTTP请求

HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。

HTTP请求由状态行、请求头、请求正文三部分组成:

  • 状态行:包括请求方式Method、资源路径URL、协议版本Version;
  • 请求头:包括一些访问的域名、用户代理、Cookie等信息;
  • 请求正文:就是HTTP请求的数据。

PS:请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除,其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中,请求正文部分可以省略,直接将想要获取的资源添加到URL中。

HTTP响应

服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

1.响应数据格式

HTTP响应由三部分组成:状态行、响应头、响应正文;

  • 状态行:包括协议版本Version、状态码Status Code、回应短语;
  • 响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;
  • 响应正文:就是响应的具体数据。

备注:我们主要关心并且能够在客户端浏览器看得到的是三位数的状态码,不同的状态码代表不同的含义,其中

1xx表示HTTP请求已经接受,继续处理请求
2xx表示HTTP请求已经处理完成
3xx表示把请求访问的URL重定向到其他目录
4xx表示客户端出现错误
5xx表示服务端出现错误

2.常见状态码的含义

  • 200—OK/请求已经正常处理完毕
  • 301—/请求永久重定向
  • 302—/请求临时重定向
  • 304—/请求被重定向到客户端本地缓存
  • 400—/客户端请求存在语法错误
  • 401—/客户端请求没有经过授权
  • 403—/客户端的请求被服务器拒绝,一般为客户端没有访问权限
  • 404—/客户端请求的URL在服务端不存在
  • 500—/服务端永久错误
  • 503—/服务端发生临时错误

3.HTTP响应模型

服务器收到HTTP请求之后,会有多种方法响应这个请求,下面是HTTP响应的四种模型:

单进程I/O模型

服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理;

多进程I/O模型

服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样服务端就可以同时处理多个请求;

复用I/O模型

服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行;

复用多线程I/O模型

服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。

HTTP报文格式

HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据

请求报文:

起始:状态行

首部:

Accept 指定客户端能够接收的内容格式类型

Accept-Language 指定客户端能够接收的语言类型

Accept-Ecoding 指定客户端能够接收的编码类型

User-Agent 用户代理,向服务器说明自己的操作系统、浏览器信息

Connection 是否开启持久连接

Host 服务器域名

主体:报文的具体数据

响应报文:

起始:状态行

首部:

Server 服务器软件名 Apache/Nginx

Date 服务器发出响应报文的时间

Last-Modified 请求资源最后修改时间

主体:响应报文的具体数据

HTTP协议版本

HTTP/0.9

HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。

HTTP/1.0

在0.9版本上做了进步,增加了请求方式POST和HEAD;不再局限于0.9版本的HTML格式,根据Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;同时也开始支持cache,就是当客户端在规定时间内访问统一网站,直接访问cache即可。

但是1.0版本的工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keepalive。

HTTP/1.1

解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求; 加入了管道机制,一个TCP连接同时允许多个请求同时发送,增加了并发性;新增了请求方式PUT、PATCH、DELETE等。

但是还存在一些问题,服务端是按队列顺序处理请求的,假如一个请求处理时间很长,则会导致后边的请求无法处理,这样就造成了队头阻塞的问题;同时HTTP是无状态的连接,因此每次请求都需要添加重复的字段,降低了带宽的利用率。

HTTP/2.0

为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。

另外也增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。

当前主流的协议版本还是HTTP/1.1版本。

网站访问量

IP IP访问量

相同的公网IP计算一次,就是同一个局域网内的所有用户访问一个网站,但是他们都是借助一个公网IP去访问那个网站的(NAT),因此这也只能算作一个IP访问量。换一次公网IP则会加1。

PV 网页访问量

用户访问的页面数就是PV访问量,同一个局域网的不同用户,而且就算是同一个用户,只要刷新一次网站页面,PV访问量就加1,三个访问量的值往往数PV的值最大。

UV 访客访问量

这里的访客不是用户,而是电脑,一台电脑算一个访客,即使是同一台电脑的不同用户,访问同一个网站UV也只能加1,只有更换电脑才会使UV加1,因为服务端会记录客户端电脑的信息。


http://www.ppmy.cn/news/1551920.html

相关文章

PyTorch 模型转换为 ONNX 格式

PyTorch 模型转换为 ONNX 格式 在深度学习领域,模型的可移植性和可解释性是非常重要的。本文将介绍如何使用 PyTorch 训练一个简单的卷积神经网络(CNN)来分类 MNIST 数据集,并将训练好的模型转换为 ONNX 格式。我们还将讨论 PTH …

telnet IP某个端口,但是ping不通IP :网络连接中的不同境遇

在网络探索的旅程中,我们常常会遇到一些看似矛盾的现象,比如能够 Telnet 一个 IP 的端口,却 Ping 不通这个 IP。这究竟是为何呢? 以往,我曾天真地认为,Telnet 通了,Ping 肯定也是通的。毕竟&am…

【Linux探索学习】第十八弹——进程等待:深入解析操作系统中的进程等待机制

Linux学习笔记:https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在Linux操作系统中,进程是资源的管理和执行单元,每个进程都有其自己的生命周期。在进程的执行过程中,进程…

C++关于二叉树的具体实现

目录 1.二叉树的结构 2.创建一棵二叉树 3.二叉树的先序遍历 1.借助栈的先序遍历 2.利用递归的先序遍历 4.二叉树的中序遍历 5.二叉树的后序遍历 1.借助栈的后序遍历 2.利用递归的后序遍历 6.二叉树的层序遍历 7.tree.h 8.tree.cpp 9.main.cpp 1.二叉树的结构 对于…

为什么redis用跳表不用b+树,而mysql用b+树而不是跳表?

写在前面 上一篇文章中,我们深度解析了redis中的跳表结构,而b树的结构我们很久之前就讲过了,那么我们知道了redis的有序集合用的是跳表,而mysql的innodb引擎用的是b树存储,但这是为什么呢?为什么redis用跳…

【新人系列】Python 入门(十四):文件操作

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

HCIE IGP双栈综合实验

实验拓扑 实验需求及解法 本实验模拟ISP网络结构,R1/2组成国家骨干网,R3/4组成省级网络,R5/6/7组成数据中 心网络。 配置所有ipv4地址,请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…

Flink 离线计算

文章目录 一、样例一&#xff1a;读 csv 文件生成 csv 文件二、样例二&#xff1a;读 starrocks 写 starrocks三、样例三&#xff1a;DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…