HTTP协议原理

2023-11-16

一、http协议是什么

        HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议,广泛应用于Web浏览器和Web服务器之间的应用层通信协议。

      在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

HTTP协议特点:

        1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

        2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

        3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

        4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快 (实际网站中会用cookie,session等解决这种无状态请求带来的不便)。

        5、支持B/S及C/S模式,默认端口80,明文传输。

        6、永远都是客户端发起请求,服务器回送响应

       因为HTTP协议为明文传输,不适合传输一些敏感信息,此时HTTPS协议就出现了。

        HTTPS协议其实就是HTTP协议的安全版,由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议。默认端口为443,主要用于网银,支付等和钱相关的业务,用于安全的HTTP数据传输(SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密)。

图片来自:深入理解HTTP协议原理_zhaisharap的博客-CSDN博客_http协议原理

       ( ps: HTTP3之前协议基于TCP协议,因为TCP协议通过数据分片、到达确认、超时重发、滑动窗口、失序处理、重复处理、数据校验等规定,为使用TCP连接的双方提供一个面向连接、可靠的字节流服务。)

        为什么HTTPS协议增加了一定的安全保障且技术足够成熟,HTTP协议依然被广泛应用呢?

        因为HTTPS协议同样具有一定的缺陷:

        1、需要申请ca证书,证书一般都是收费的,且功能越强大,证书收费越高。

        2、HTTPS因为加入了SSL协议,HTTPS除了TCP的三个包,还要加上SSL握手需要的9个包,连接服务器端资源占用高很多,且费时,包括SSL的加解密也需要一定的时间,网站响应时间会变慢,用户体验感不如HTTP

        3、HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高

        

        所以一些小网站,对安全性要求没有特别要求的网站还是会采取HTTP协议,尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,他大幅增加了中间人攻击的成本,保障了一定程度的相对安全。

二、HTTP协议不同版本

        1、HTTP 0.9 ,只有一个GET方法,没有首部,目标用来获取HTML(基本没人用了)。

        2、HTTP 1.0 ,创建一次连接,获得一个web资源,连接断开(但是这样每次请求都会重新建立和断开 TCP 连接,无法复用,代价过大)。

        3、HTTP 1.1,创建一次连接,获得多个web资源,连接断开(默认持久连接,引入cookie以及安全机制,)

        4、HTTP 2.0,中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据(HTTP2使用了HPACK头部压缩算法,多路复用,在一定程度上减轻了传输的成本。但如果存在丢包的情况的话,那么整个tcp就得重新传输,后面资源就会被阻塞)。

        5、HTTP 3.0,改用了 QUIC协议,此协议基于传输层UDP协议(在此之前基于TCP协议),极大幅度提高了数据传输速率,也解决了HTTP2.0丢包的问题(没有实际使用过,有无其他安全,性能问题,暂且不知)。

三、常见的HTTP请求方法

        1、GET:GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响

        GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,一般仅用于请求数据,但是开发过程中也会用于修改数据,可行但不提倡。(因GET请求的不安全性,在处理敏感数据时,尽量不可以使用GET请求)

         2、POST:POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。

        POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

        3、PUT:PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

        4、DELETE:DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。

        5、HEAD:HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分,一般用来确定请求的有效性及资源的更新日期时间等。(因为服务器返回的消息头应与对应GET请求返回的消息头相同,这种方法可用于检查某一资源在向其提交GET请求前是否存在。)

        6、CONNECT:CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)

        7、OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

        8、TRACE:TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。(这种方法可用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器)

      

        在所有的HTTP方法中,安全界认为PUT、DELETE、TRACE是不安全的,TRACE容易引发XST攻击,PUT/DELETE没有认证机制等原因,利用PUT方法即可快捷简单地入侵服务器,上传Webshell或其他恶意文件,从而获取敏感数据或服务器权限或者利用DELETE方法可以删除服务器上特定的资源文件,造成恶意攻击(PUT、TRACE请求方法因为风险过大,现在基本很少被使用,DELETE请求方法,需要做好认证)。

        当然OPTIONS方法也存在一定的风险,将会造成服务器信息暴露,如中间件版本、支持的HTTP方法等,但是风险相对前三种方法,还是较小的。

OPTIONS方法返回信息

四、HTTP工作原理

        HTTP协议定义Web客户端浏览器如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端服务器。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

浏览器发送网络请求到服务器

1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接,若连接还未失效,则省略三次握手;

wireshark抓包,连接未失效示例 

3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

三次握手,建立连接

wireshark抓包示例

4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5. 四次挥手,释放 TCP连接;

四次挥手,断开连接

wireshark抓包,四次挥手

6. 浏览器将该 html 文本并显示内容;  

五、HTTP请求包和返回包

        burp抓包分析一下HTTP请求包和返回包。

        http请求包括:请求行(第一行)、请求头、请求体

        http响应包括:响应行(第一行)、响应头、响应体

       

 1、请求包的一些重要的配置信息: 

配置信息 描述及常用配置值
Location 指定响应的路径,需要与状态码302配合使用,完成跳转
Content-Type

响应正文的类型(MIME类型)

取值:text/html;charset=UTF-8,text/plain,text/css,text/javascript,image/gif,image/jpeg,image/png,application/x-www-form-urlencoded,application/json,text/xml,multipart/form-data

Set-Cookie 与会话相关技术。服务器向浏览器写入cookie
Content-length 响应正文的长度
Cache-Control  响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。常见的取值有常见的取值有private、public、no-cache、max-age,no-store,默认为private。缓存时间为31536000秒(365天)
Connection connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求

 2、返回包重要配置

六、HTTP返回状态码

一些常见的返回状态码分析:

  200: '服务器成功返回请求的数据。'

  201: '新建或修改数据成功。'

  202: '一个请求已经进入后台排队(异步任务)。'

  204: '删除数据成功。'

  400: '发出的请求有错误,服务 器没有进行新建或修改数据的操作。'

  401: '用户没有权限(令牌、用户名、密码错误)。'

  403: '用户得到授权,但是访问是被禁止的。'

  404: '发出的请求针对的是不存在的记录,服务器没有进行操作。'

  406: '请求的格式不可得。'

  410: '请求的资源被永久删除,且不会再得到的。'

  422: '当创建一个对象时,发生一个验证错误。'

  500: '服务器发生错误,请检查服务器。'

  502: '网关错误。'

  503: '服务不可用,服务器暂时过载或维护。'

  504: '网关超时。'

参考文献:

HTTP为什么使用TCP_曾经的阿飞的博客-CSDN博客_为什么http用tcp

Http协议详解(深入理解)_有抱负的小狮子的博客-CSDN博客_http详解

百度安全验证

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP协议原理 的相关文章

随机推荐

  • 【C/C++】类型转换

    文章目录 1 C语言中的类型转换 1 1隐士类型转换 相近类型 意义相近 1 2 强制类型转换 2 C 的类型转换 2 1相近类型转换 static cast 2 2强制类型转换 reinterpret cast 2 3去掉对象const属
  • pytorch用于多标签分类的bceloss

    def bceloss output target positive prob F logsigmoid output negative prob F logsigmoid output loss positive prob target
  • sklearn机器学习——逻辑回归(一)

    1 概述 1 1 名为 回归 的分类器 x为特征向量 通过函数 线性回归使用输入的特征矩阵X来输出一组连续型的标签值y pred 以完成各种预测连续型变量的任务 比如预测产品销量 预测股价等等 那如果我们的标签是离散型变量 尤其是 如果是满
  • Java常用集合分析

    ArrayList与Vector 动态数组 速度较慢 创建时可以使用initialCapacity指定初始化大小 如果不指定则数组大小默认为10 ArrayList与Vector的区别 ArrayList是线程不安全的 当多个线程访问同一个
  • matlab调整图像大小123开始—放缩比例

    imresize 调整图像大小 此 MATLAB 函数 返回图像 B 它是将 A 的长宽大小缩放 scale 倍之后的图像 输入图像 A 可以是灰度 RGB 或二值图像 如果 A 有两个以上维度 则 imresize 只调整前两个维度的大小
  • 【gitlab wiki】git首次上传本地文档操作步骤

    1 在gitLab中创建一个项目 2 进入本地电脑中的你要上传文件的文件目录 右击鼠标选择 Git Bash Here git命令窗口 本机电脑要安装好git 3 在远程git项目中 复制出项目http地址 4 在 Git Bash Her
  • OBJECT和EMBED标签

    OBJECT和EMBED标签 一 介绍 我们要在网页中正常显示flash内容 那么页面中必须要有指定flash路径的标 签 也就是OBJECT和EMBED标签 OBJECT标签是用于windows平台的IE浏览器的 而EMBED是用于win
  • 微信可以远程控制电脑吗_教你远程控制你的电脑

    众所周知啊 上班最尴尬的就是 你办公室的电脑还开着 可是人没了 老板看见你的电脑屏幕 打开的不是办公软件 而是游戏 电影网站 特意找了一个微信小程序能够帮你远程控制电脑锁屏 关机 甚至还能帮你操控电脑 打开关闭微信 以及各种程序 这款软件只
  • mysql 无法插入中文

    MySQL数据库默认编码已经是utf8了 default character set utf8 可是向数据库中表中插入中文时 却老是出现 xB5 xA5 xD1 xA1 for column 这样的错误 经过查阅网上类型的错误后 发现一个很
  • STM32 ADC采样不准怎么办

    最近在使用STM32L011的ADC时 发现ADC采样值极其不准确 经过查找资料 和反复测试 总算摸出点门道 如将VDDA接到VDD 那么电源的波动会极大的影响ADC精度 不过使用内部参考电压可以计算实际的VDDA电压 说明 VREFINT
  • Ubuntu 16.04下基于Anaconda安装cuda、cudnn及Pytorch

    Anaconda的基本使用见之前的博客 Ubuntu 16 04下Anaconda的安装及使用 创建虚拟环境pytorch gpu 并激活该环境 conda create name pytorch gpu python 3 6 source
  • CSS浮动(1)

    一 结构伪类选择器 1 作用与优势 作用 根据元素在HTML中的结构关系查找元素 优势 减少对于HTML中类的依赖 有利于保持代码整洁 场景 常用于查找某父级选择器中的子元素 2 选择器 选择器 说明 E first child 匹配父元素
  • python 数据库的中文乱码问题

    在使用pymssql操作sqlserver数据库时 碰到了中文乱码的问题 之前从网上查了很多 又是python编码 又是数据库编码什么的 非常乱 试了很多 好多都解决不了问题 数据库是sqlserver 先说我碰到的问题 数据库的配置cha
  • 【安卓学习之常见问题】 AAPT: error: resource drawable/ (aka xxx) not found(含as快捷键说明)

    安卓学习之常见问题 AAPT error resource drawable aka xxx not found 含as快捷键说明 相关文章 android学习开源项目之BasePopup BasePopup PopupWindow 进行二
  • c语言编程题

    include stdafx h include
  • 概念解析

    注1 本文系 概念解析 系列之一 致力于简洁清晰地解释 辨析复杂而专业的概念 本次辨析的概念是 非极大值抑制 NMS 及其改进工作 非极大值抑制 NMS 原理 缺点和改进 1 背景介绍 在计算机视觉中 物体检测是一个核心且充满挑战的问题 众
  • MQTT 协议基本介绍

    目录 一 简介 二 基本特点 三 基本概念 四 简单示例 五 进一步了解MQTT 3 六 MQTT协议的工作方式 七 MQTT控制报文 CONNECT报文 CONNACK报文 八 清除会话 保留消息和QoS的组合 九 MQTT 5 0 协议
  • Hyperledger Fabric环境搭建流程记录详解

    Fabric环境搭建记录 什么是超级账本Fabric 1 Fabric的本质 与一般区块链技术的相同点 Fabric与其他区块链技术一样 都有一个账本 和以太坊相像 也允许使用智能合约 从本质上看 它是参与者共同管理交易的系统 是联盟链的典
  • python分析excel数据-对照Excel使用Python进行数据分析,更快掌握

    Excel和Python 作为数据分析的主流工具 在从效率提升到数据商业化的整个过程中 都起到了重要作用 不管是在Excel中通过鼠标点选实现 亦或是利用Python通过代码实现 数据分析中的很多基础功能都是相通的 在数据量级大跃进的今天
  • HTTP协议原理

    一 http协议是什么 HTTP协议 全称HyperText Transfer Protocol 中文名为超文本传输协议 是互联网中最常用的一种网络协议 广泛应用于Web浏览器和Web服务器之间的应用层通信协议 在Internet上的Web