网络原理-HTTP协议

HTTP协议

HTTP协议全称为超文本传输协议,除了能传输字符串,还能传输图片、视频、音频等。

当我们在访问网页的时候,浏览器会从服务器上下载数据,这些数据都会放在HTTP响应中,然后浏览器再根据这个HTTP响应显示出网页信息。

抓包

抓包工具本质上是一个代理工具,即我们将构造好的请求首先发送给抓包工具,抓包工具然后解析请求,然后发送给服务器,最后再将服务器的响应返回。在这使用Fiddler抓包工具。

抓包工具原理:

当我们打开工具会出现如下信息:

认识HTTP请求/响应

HTTP请求是文本协议,不同于IP、TCP、UDP协议是二进制协议,因此我们可以通过抓包工具清楚的看出协议中的内容。

一个HTTP请求/响应由四部分组成:首行、报头(请求头/响应头)、空行、正文

首行

在请求报文和响应报文中,首行具有一定的区别。

在请求报文中:

首行由方法+URL+版本号这三部分组成,中间由空格分隔。

方法: 方法描述的是语义,表示这次请求要干什么。例如: GET:表示从服务器获取xxx , POST: 表示想服务器传输xxx。

在这么多的方法里面,GET和POST方法最为常用。比如当获取网页信息的时候一般使用GET,而登录或者上传资源的时候使用POST。

虽然HTTP协议设计指出是希望程序员能够遵守这里规则,但是事与愿违,程序员不遵守也不影响,可以将一些参数放到其他位置。


URL:资源定位符,用来描述网络上的资源,俗称网址。在URL中有特定的格式:

服务器地址可以是域名或者IP地址。

带层次的文件路径表示要访问服务器上的哪个资源

查询字符串也叫query string,表示访问服务器的时候带上哪些参数,使用键值对的格式,键和值之间使用=,键值对之间使用&分隔,查询字符串以?开始。虽然知道了查询字符串的格式,但是我们并不能知道里面的内容和含义,因为程序员可以自定义。

片段标识符一般用在文档中,当你带上这个参数的时候,文档会直接展示那一页/段。

虽然规定了格式是这样,但是如果省略了某几个参数也不碍事。

当已经请求了当前域名的主页,此时这个主页如果又去请求当前域名的内容,此时就可以不带上域名/ip,会默认为前面的域名。

如果端口不写,会根据协议来自动添加端口号,如http协议自动添加的就是80,https添加的就是443。

如果省略带层次的文件路径,那么就相当于访问的是根目录,通常对应到服务器的主页。

查询字符串也是可以没有的,因为可以将内容写到正文中。

总之,http是一个非常灵活的协议。


版本号:表示当前http是啥版本,最新已经到了3.0,但是广为使用的还是1.0和1.1。

在响应报文中:

响应的首行和请求相比差异就比较大了。

响应报文的首行是由版本号+状态码+状态码的描述组成。

其中状态码大致有如下几类:

状态码状态码描述
200表示成功
404表示访问的资源不存在
403表示访问的资源没有权限
502表示服务器挂了
504表示服务器超时了
302表示重定向,会跳转到其他网站

报头(header)

在报头中属性是使用键值对的形式进行描述的。每一行是一个键值对,键与键之间使用逗号分隔,键与值之间使用冒号分隔。

User-Agent:主要包含的是当前机器的系统和浏览器的版本。在互联网早期的时候,由于浏览器支持的功能可能并不一样,一些可以支持视音频,一些只能支持文字,通过版本号就可以进行区分,然后返回不同的页面了。如今各大浏览器的功能都差不多了,UA往往用来区分是PC端还是移动端。

Referer:描述了当前的页面是从哪里跳转的。当我们在一个页面中点击了广告,跳转到了广告页面,此时广告主的服务器就能统计是从谁那边过来的,后期就可以给不同的网站结广告费了。

Cookie:是浏览器本地存储数据的一种机制,用来缓存一些临时数据,当下次访问的时候节省访问时间。当浏览器再第一次访问服务器的时候,浏览器是一无所知的,因此需要加载很多的html,css,js,img东西,由于里面的有些内容可能会很久都不会变,就通过cookie保存机制将这些内容保存下来,下次就不需要再去请求了。

在cookie中使用的也是键值对的结构,并按照域名的维度区分不同网站的不同cookie。一个网站cookie会存储很对键值对,但往往会有一个很重要的键值对,用来表示用户的身份信息(当下次访问的时候就不要再登录了),为了实现身份识别的效果,服务器这边也需要一个Session机制来支持。

空行

空行相当于是一个分隔符,分隔了报头(header)和正文(body),也就描述了正文部分是从哪里开始的。

正文(body)

在请求报文中的正文部分,也可以带有一些参数,用来针对资源的补充说明,起到查询字符串的作用。通常使用键值对的形式构成,其中的一些特殊符号会经过URLencode处理,而敏感信息则进行加密处理。

GET方法 VS POST方法

GET方法一般是用来从服务器获取某些资源,POST方法则是用来向服务器上传某些资源。

不过这只是从语义层面来说,但在实际使用上没啥区别,可以相互替代。两者本质上没有区别,但在习惯使用上有一些区别。

GET 是把一些自定义的数据放到查询字符串中,正文部分通常是空的。

POST 是吧一些自定义的数据放到正文中,查询字符串通常是空的。

本质上都是传输数据,放在哪都一样,只不过放在查询字符串中用户是可见的,而放在正文中用户需要通过一定的手段才能看到。


注意:

1、GET的长度并没有要求限制。在URL中并没有对长度进行限制,程序猿完全可以将一个很长的正文内容放置到查询字符串中。

2、POST并不一定比GET更加安全,安全指的是传输的数据不容易被截获,就算被截获了也不容易破解,POST只是将传输的数据放到了body没有更加安全一说。

3、GET是幂等的,POST不是幂等的(幂等指的是输入相同的值,每次返回的结果也都一样),虽然在RFC标准文档上这么建议设计,但是实际中就不一定采纳了,因此不能这么进行区分。例如:访问视频网站的时候,会根据实时热点进行推荐视频。

4、由于GET的不幂等,因此GET请求不一定就能被缓存,缓存的前提肯定是数据不能一直修改,因此能不能被缓存也不是两者的区别。

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

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

相关文章

STM32H743+USBHID+CubeMX配置

一、环境准备 电脑系统:Windows 10 专业版 20H2 IDE:Keil v5.35、STM32CubeMX v6.5.0 测试硬件:正点原子阿波罗STM32H743 二、测试步骤 1、使用用例工程 配置STM32H743定时器功能-CSDN博客https://blog.csdn.net/horse_2007s/article/d…

HR招聘面试测评,哪些工作岗位需要测评创新能力?

什么是创新能力? 创新能力指在现有的物质基础上,通过某些特定的条件,促成满足未来社会发展的新事物。无论是个人还是国家都需要巨大的创新能力,因为创新是一切发展的根基,离开了创新,所有的发展都是原地踏…

每日复盘-20240527

今日关注: 六日涨幅最大: ------1--------300956--------- 英力股份 五日涨幅最大: ------1--------300956--------- 英力股份 四日涨幅最大: ------1--------301361--------- 众智科技 三日涨幅最大: ------1--------301361--------- 众智科技 二日涨幅最大: ----…

CAS原理技术

CAS原理技术 背景介绍结构体系术语接口原理基础模式1. 首次访问集成CAS Client的应用2. 再次访问集成CAS Client的同一应用3. 访问集成CAS Client的其他应用 代理模式1. 用户在代理服务器上执行身份认证2. 通过代理应用访问其他应用上授权性资源 背景 本文内容大多基于网上其他…

开机必启截图标注类神器Snipaste,基本使用及技巧

目录 一、软件简介二、基本安装三、自启设置四、快捷操作五、使用技巧 一、软件简介 Snipaste 是一款简单高效的截图工具。只需按下 F1 即可截图(可进行自主设置),再按 F3 即可将截图置顶显示(贴图功能)。你还可以将剪…

反射器与联邦实验

要求: 1、AS1存在两个环回, 一个地址为192.168.1.0/24该地址不能在任何协议中宣告AS3存在两个环回, 一个地址为192.168.2.0/24该地址不能在任何协议中宣告 最终要求这两个环回可以互相通讯; AS1的另一个环回为10.1.1.0/24 AS3的另-个环回为10.1.2.0/24 2、整个AS2的…

JMeter 测试单节点与集群的并发异常率

一. JMeter 测试单节点与集群的并发异常率 下载地址:https://jmeter.apache.org/download_jmeter.cgi 单个tomcat测试结果(2000个用户,每个用户访问100次) nginx集群负载均衡tomcat结果(2000个用户,每个用户访问100次)

YOLOV8逐步分解(5)_模型训练初始设置之混合精度训练AMP

yolov8逐步分解(1)--默认参数&超参配置文件加载 yolov8逐步分解(2)_DetectionTrainer类初始化过程 yolov8逐步分解(3)_trainer训练之模型加载_yolov8 加载模型-CSDN博客 YOLOV8逐步分解(4)_模型的构建过程 在上述文章逐步分解(3)和(4&…

【吊打面试官系列】Java高并发篇 - ConcurrentHashMap 的并发度是什么?

大家好,我是锋哥。今天分享关于 【ConcurrentHashMap 的并发度是什么?】面试题,希望对大家有帮助; ConcurrentHashMap 的并发度是什么? ConcurrentHashMap 的并发度就是 segment 的大小,默认为 16, 这意味着最多同时…

Android:将时间戳转换为本地时间格式

一、效果图 图1,中国的时间格式 图2,美国的时间格式 二、StringUtil.kt代码 import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* object StringUtil {fun formatTimestamp(currentTime: Long): String {var sdf Si…

【STM32】检测SD卡是否插入

【STM32】检测SD卡是否插入 开发环境原理图确定引脚的高低电平中断方式检测插入配置引脚打开引脚的中断编写代码显示SD卡信息引脚中断回调函数 实现的效果 开发环境 软件:STM32CubeIDE1.14.1 硬件:立创天空星STM32F407VE;SD卡 原理图 要确…

isscc2024 short course4 In-memory Computing Architectures

新兴的ML加速器方法:内存计算架构 1. 概述 内存计算(In-memory Computing)架构是一种新兴的机器学习加速器方法,通过将计算能力集成到存储器中,以减少数据移动的延迟和能耗,从而提高计算效率和性能。这种方…

服务器软件架构演进

服务器软件架构演进 背景介绍阶段一:单机部署阶段二:应用与数据分离部署阶段三:启用缓存优化阶段四:启用应用服务器集群阶段五:数据库读写分离阶段六:启用反向代理及CDN加速阶段七:启用分布式文…

ComfyUI简单介绍

🍓什么是ComfyUI ComfyUI是一个为Stable Diffusion专门设计的基于节点的图形用户界面,可以通过各种不同的节点快速搭建自己的绘图工作流程。 软件打开之后是长这个样子: 同时软件本身是github上的一个开源项目,开源地址为&#…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第28课-avatar玩家3D形象

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第28课-avatar玩家3D形象 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

零售EDI:Target DVS EDI项目案例

Target塔吉特是美国一家巨型折扣零售百货集团,与全球供应商建立长远深入的合作关系,目前国内越来越多的零售产品供应商计划入驻Target。完成入驻资格审查之后,Target会向供应商提出EDI对接邀请,企业需要根据指示完成供应商EDI信息…

windows 控制面板卸载程序在注册表中位置

计算机\HKEY_LOCAL_MACHINE或者HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\荐片高清影音 HKEY_CURRENT_USER 控制面板注册表只有当前用户可见 HKEY_LOCAL_MACHINE 控制面板注册表所有用户可见

【STM32踩坑】HAL固件库版本过高导致烧录后无法运行问题

问题引入 目前STM32CUBEMX已经更新到了6.11版本,对应的固件库也一直在更新; 以STM32F1库为例,目前最新的库对应版本为1.8.5 但是我们会发现,如果直接使用1.8.5版本的固件库生成HAL源码后,烧录是可以烧录,但…

leetcode栈和队列的相关题、有效的括号、用队列实现栈、用栈实现队列、设计循环队列等介绍

文章目录 前言一、有效的括号二、用队列实现栈三、 用栈实现队列四、设计循环队列总结 前言 leetcode栈和队列的相关题、有效的括号、用队列实现栈、用栈实现队列、设计循环队列等介绍 一、有效的括号 leetcode有效的括号 // 动态增长的栈 typedef char STDataType; typedef…

香港优才计划需要什么条件?一文给你说清2024优才政策、申请利弊及获批攻略

香港优才计划申请,竞争正逐渐加剧,在正式递交申请前,客观评估自身申请条件,找准个人履历中与香港人才引进的契合点,并在申请材料中详细表明,更有助于获批。 在申请之前,我们必须明白一个事实&a…