HTTP协议【报文格式】

news2024/11/28 6:39:54

文章目录

    • HTTP协议
      • 什么是HTTP协议
      • HTTP协议格式
        • 抓包工具的使用
        • HTTP请求
          • URL
          • URL的组成
          • URL encode
        • HTTP请求的报文格式
        • HTTP响应的报文格式
    • HTTP方法
      • GET方法
      • POST方法
      • POST方法与GET方法的区别
    • 请求报头
    • HTTP响应
      • 状态码
        • 状态码的组成
        • 状态码的类别

HTTP协议

什么是HTTP协议

HTTP协议即Hyper Text Transfer Protocol(超文本传输协议),是用于服务器与本地浏览器超文本的传输的传送协议。HTTP基于TCP/IP通信协议传输数据。是一种应用广泛的应用层协议。

在这里插入图片描述如图,我们这里打开的百度网址实际上就是通过HTTP协议来传输数据的。当输入一个网址,按下回车的同时,浏览器就会给百度的服务器发送一个HTTP请求,相应地,百度的服务器也会返回给浏览器一个HTTP响应。响应结果经浏览器解析,反馈给用户,即页面展示成功。但是当我们访问一个网站的时候,一般这样的HTTP请求/响应的交互过程时有多次的。

通过F12打开chrome的开发者工具,就可以在“网络”标签页找到关于HTTP请求/响应的记录:
在这里插入图片描述

HTTP协议格式

抓包工具的使用

尽管使用Chrome的开发者工具也可以达到抓包的目的,但其提供的功能有限,使用感不如专门的抓包工具,因此我们推荐使用Fidder,一种功能丰富但易上手的抓包工具。下面附上Fidder的下载地址:https://www.telerik.com/fiddler/

在这里插入图片描述
这就是Fidder的页面情况,左侧是HTTP的请求列表,双击任意一条请求,右侧就是请求的详细信息,其中右侧上方就是HTTP请求的详细信息,右侧下方是HTTP响应的详细信息。

所谓抓包工具,实际就是浏览器与服务器交互过程中的“中间商”,浏览器在访问一个网站时,首先把HTTP请求发给Fidder,由Fidder将请求转发给对应网站的服务器,当服务器对请求做出响应时,同样是经由Fidder转发给浏览器,因此Fidder对于浏览器与服务器之间的交互自然是十分清楚的。

HTTP请求

URL

所谓URL就是我们俗称的“网址”,对于互联网上的文件,URL都是存在且唯一的,它包含了文件的位置等相关信息;

URL的组成

URL的组成元素中包含了许多有用的信息:

  • https :协议方案名,常见的有http和https,可以省略,省略时默认是http://;
  • user:pass :登录信息,一般省略;
  • www.xxxxxx :服务器的地址,属于一个“域名”,如果需要得到具体的IP地址,可以使用ping命令;
  • 一个数字:端口号,可以省略,http默认端口号80,https默认端口号443;
  • 带层次的文件路径:可以省略,省略后相当于/. ;
  • 查询字符串:是一个键值对的结构,可以省略;
  • 片段标识符:主要用于页面内跳转,可以省略;

下面是百度的URL:
在这里插入图片描述

URL encode

对于一个完整的URL,除了上面URL的组成部分外,还有一些像’/’ ‘?’ ':'等这样的字符,这些字符是被URL赋予了特殊意义的字符。因此为了避免无效URL的出现,如果在URL的某一组成部分中出现了类似字符,就需要对这些字符首先进行转义。n

具体的转义规则和转义情况,这里不做过多介绍,如果确需转义,一般使用在线的urlencode 工具即可;

HTTP请求的报文格式

下面是访问“百度”时,使用抓包工具捕捉到的信息:
在这里插入图片描述HTTP请求主要有这样几部分组成:

  • 首行,即请求的第一行
    在这里插入图片描述

  • 请求报头 header

在这里插入图片描述

请求报头的整体格式是键值对的形式;
键和值之间以分号进行分割;
报头的种类有多种:

  • 空行;

空行是请求报头的结束标记

  • 正文(body)

并非所有的HTTP请求都有正文,这取决于用户对网站的具体访问情况;

HTTP响应的报文格式

使用抓包工具捕捉到的一段HTTP响应:

在这里插入图片描述

HTTP响应的组成:

  • 首行

在这里插入图片描述

  • 响应报头

与请求报头类似,也是键值对的形式;

  • 空行;

同样作为报头的结束标志;

  • 响应正文;

响应正文即服务器返回给浏览器的数据;

HTTP方法

HTTP协议的方法有许多种,这里只介绍最常见几种:

GET方法

Get方法是很常用的HTTP方法,GET方法最初产生的原意是为了获取服务器上的资源,但随着具体生产情景的不断变化,GET方法的应用场景也变得越来越广泛;

我们每在浏览器中输入一个URL并按下回车键,浏览器就会发送给服务器一个GET请求;
HTML中的一些标签,同样也会触发GET请求;
GET请求的URL的长度取决于浏览器和服务器,官方的HTTP协议标准并未对其长度做出限制;

GET请求的特点:

  • 首行的第一部分为GET;
  • 请求正文为空;
  • URL的query string 可以为空,也可以不为空;

POST方法

POST方法同样也是一种很常见的HTTP方法,将用户输入的数据提交给服务器是POST方法的初心,但也随着开发场景的不断变化而有了更多的用途;

POST方法的特点:

  • 首行的第一部分为POST;
  • URL的query string 一般为空,但不是一定的;
  • body部分一般不为空;

POST方法与GET方法的区别

实际上,POST方法与GET方法没有本质区别,两者的区别主要是体现在使用习惯上:

  • GET方法主要用于获取数据,POST方法主要用于提交数据给服务器;
  • GET方法主要通过query string 来传递数据,POST方法主要使用body部分来传递数据;
  • GET请求一般建议“幂等”,POST方法没有特殊要求幂等;
  • GET方法获取到的数据一般可以进行缓存,而POST方法得到的数据一般不被缓存;

两者之间的区别都不是绝对的,在很多时候两种方法之间是可以相互替代的;

请求报头

HTTP协议的请求报头的种类也有多种,这里也仅仅介绍较为常见的:

  • HOST
    访问的服务器主机的地址与端口;
  • Content-Length;
    body中的数据长度;
  • Content-Type;
    请求中body的数据格式;
    这2种都需要搭配body来使用;

关于HTTP请求的body的数据格式:

1.json;
2.urlencodes;
form-data;

  • User=Agent(UA)

表示浏览器和操作系统的大致属性;

  • Referer;
    表示该页面由哪一个页面跳转而来,不是一定存在的,如果是直接通过收藏夹访问到的页面就不会有该报头;
  • Cookie
    Cookie是浏览器在本地存储数据的一种机制;
    一般情况下,用户的数据都是存储在服务器的,但是如果仅仅存在服务器,如果用户重复某种操作(例如登录),就总是需要去访问服务器,为了简化一些操作,避免重复多次地做相同的操作,我们就尝试在浏览器中存储一些信息;
    但是为了用户的安全,对于浏览器的存储操作,必须做出限制,只有在限定条件下,浏览器才有访问少量磁盘的权利,来达到存储一些用户信息的目的;

在浏览器页面,点击这个“小锁头”的图标,就可以看到当前页面的Cookie;
在这里插入图片描述

HTTP响应

状态码

HTTP状态码显示客户端HTTP请求的返回结果及标记服务器端的处理是否正常,可以简单理解为访问一个页面的访问结果,包括访问成功,访问失败或者其他情况。

状态码的组成

状态码一般是由3位数字和相关原因短语组成,其中数字中的第一位指定了响应类别。像 200 OK;

状态码的类别

状态码的响应类别有下面5种:
在这里插入图片描述状态码的类别有以上5种,而真正存在的状态码则有几十种之多,此处只介绍比较常见的几种状态码:

  • 200 OK;
    最常见的一个状态码,表示访问成功,客户端发送的请求在服务器端被正常处理;

  • 304 Not Modified;
    表示 客户端发送了附带条件的请求,服务器端允许请求的访问资源,但未满足条件的情况;

  • 400 Bad Request;
    请求报文中存在语法错误;

  • 403 Forbidden ;
    对请求资源的访问被服务器拒绝了;

  • 404 Not Found;
    在服务器上无法找到请求的资源或服务器端拒绝请求且不想说明理由;

4xx的响应结果表明客户端是发生错误的原因所在;

  • 500 Internal Server Error;
    服务器出现内部错误;
  • 504 Gateway Timeout;
    服务器处理请求超时;

5xx的响应结果表明服务器本身发生错误;

over!

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

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

相关文章

m基于GA遗传优化的多因素加权竞价博弈频谱分配算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 假设有M个用户均为MIMO Full Duplex&#xff0c;N个频率&#xff0c;1<N<M&#xff0c;设计算法实现M个用户与N个频率的匹配。 由于在一个MIMO系统中&#xff0c;用户数量M大于可用的频谱个…

web自动化测试入门篇04——selenium+python基础方法封装

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

记录一次解决centos不定时触发oom的经历

前言 前一段时间&#xff0c;业务部门的系统不定时的反馈&#xff0c;系统打开不了&#xff0c;提示&#xff1a; 等技术开发同学反应过来去查看业务状态时&#xff0c;服务又恢复了&#xff0c;由于不是核心的业务&#xff0c;并且出问题差不多1分钟左右&#xff0c;没太在意…

【Vue 快速入门系列】todoList案例小总结

文章目录一、案例效果二、项目介绍三、版本更新迭代末、项目素材1.css样式2.html一、案例效果 如下图所示&#xff0c;制作一个这样的记事本&#xff0c;可以使用这个记事本进行数据的存储以及管理&#xff0c;样式是天禹老师写好的我们直接使用就好了&#xff0c;主要在这个小…

[UE][UE5]零基础学习-学习记录1-UE5安装与基本使用方法

[UE5]学习1-UE5安装与基本使用方法写在前面01.作者碎碎念2.UE5安装方法01.UE5需要的电脑配置02.UE5安装方法001.Epic下载002.下载安装UE503.基本使用方法001.创建项目打开现有的项目&#xff1a;002.文件目录结构003.用户界面介绍1).3D画面视窗2).菜单栏3).内容浏览器4).属性面…

关于CM3/CM4位带操作的总结

1.位带操作定义 STM32的存储器映射中的内存区域和外设区域有一段地址空间&#xff08;都是最低1MB&#xff09;是位带区域&#xff0c;跟这个区域相对应的有一段位带别名区域&#xff0c;位带别名区的大小是位带区的32倍&#xff0c;位带别名区的每一个地址都对应位带区域的一个…

C. Hamiltonian Wall edu139 div2

Problem - C - Codeforces 题意是给你一个2*n的网格&#xff0c;让你一笔把所有的B涂满&#xff0c;并且只能涂一次&#xff0c;问你是否可行 分析&#xff1a; 其实分析的时候我想到了转移。每一次的结果是由上一次转移而来&#xff0c;所以如果前后矛盾的话&#xff0c;即…

人工智能:智能语音技术应用场景介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

虹科QA | SWCF2022 12月6日演讲笔记:C波段卫星与5G之间的干扰排查及解决方案

虹科2022年度SWCF卫星通信与仿真测试研讨会正在进行中。昨日精彩演讲&#xff1a;C波段卫星与5G之间的干扰排查及解决方案&#xff0c;感谢大家的观看与支持&#xff01; 昨晚的直播间收到一些粉丝的技术问题&#xff0c;虹小科汇总了热点问题并请讲师详细解答&#xff0c;在此…

目前UI设计薪资待遇怎么样?工作好找吗?

UI设计的火爆&#xff0c;导致有很多年轻人都愿意投身于这个行业。有很多年轻的朋友都在问&#xff0c;UI设计的薪资待遇怎么样&#xff1f;工作难找吗&#xff1f;本文统一解答一下。 1、UI设计的薪资水平 UI设计的薪资待遇一直很好&#xff0c;学习UI设计之前没有任何相关基础…

PMP每日一练 | 考试不迷路-12.13(包含敏捷+多选)

被延期考试的宝子 一定要坚持刷题 每日5道PMP习题助大家上岸PMP&#xff01; ​题目1-2&#xff1a; ​1.一位主要相关方要求将每日站立会议的持续时间人15分钟增加到1小时。Scrum主管应该做什么? ( ) A.接受建议并建议团队更改会议时间表 B.安排与产品负责人和团队开…

窗口销毁消息 WM_DESTROY 的正确处理方式

上次&#xff0c;我提到了可能导致正常的消息循环被破坏的怪异之处。 有一位读者 Adrian 指出&#xff0c;WM_GETMINMAXINFO 消息在顶级窗口 WM_NCCREATE 之前到达。这确实很不幸&#xff0c;但&#xff08;无论是否错误&#xff09;十多年来一直如此&#xff0c;现在修改它会…

【实时数仓】实现用户行为日志相关功能(源码)

文章目录一 准备用户行为日志-DWD层1 代码实现&#xff08;1&#xff09;识别新老访客&#xff08;2&#xff09;利用侧输出流实现数据拆分&#xff08;3&#xff09;将不同流的数据推送到下游kafka的不同Topic&#xff08;分流&#xff09;a 封装方法b 程序中调用kafka工具类获…

数据链路层

文章目录数据链路层的功能ARP协议DNS-------域名解析&#xff08;浅浅的了解一下&#xff09;在浏览器中输入URL后&#xff0c;发生的事情&#xff08;经典面试题&#xff09;ICMP协议NAT技术代理服务器网络核心知识大总结数据链路层的功能 对比理解网络层。 网络层 &#xff…

飞控学习随记

常见指令 编译Arduplane程序 cd ardupilot/ ./waf plane 进入 Tools/autotest 文件夹中&#xff0c;启动3D flightgear ./fg_quad_view.sh 进入ArduPLane文件夹中&#xff0c;启动仿真 sim_vehicle.py --map --console -L KSFO&#xff08;-L 选择起飞位置&#xff09; 解锁…

字节女测试工程师万字总结的软件测试入门技巧

成为一个优秀的测试工程师需要具备哪些知识和经验&#xff1f; 针对这个问题&#xff0c;可以直接拆分以下三个小问题来详细说明&#xff1a; 1、优秀软件测试工程师的标准是什么&#xff1f; 2、一个合格的测试工程师需要具备哪些专业知识&#xff1f; 3、一个合格的测试工程…

前端vue项目部署到生产环境(包括nginx安装及配置)

一.vue3项目打包 vue3项目 使用vue-cli创建的&#xff0c;使用npm run build打包到dist 二.在服务器上安装nginx 1.去nginx的官网下载windows版本的nginx&#xff0c;下载地址&#xff1a;nginx: download 最好安装稳定版&#xff0c;下载完成后解压nginx压缩包&#xff1a…

Android Studio实现数独小游戏,休闲益智

文章目录一、项目概述二、开发环境三、详细设计3.1 界面设计3.2 逻辑设计四、运行演示一、项目概述 数独是一种逻辑解谜游戏&#xff0c;它规则稍复杂&#xff0c;解题过程富有挑战性。本次安卓数独小游戏&#xff0c;主页面有继续游戏、新游戏、关于和退出四个功能&#xff0…

【实训项目】教师工作量管理系统(超级详细)

目录 一、需求与分析 1. 项目概述 1.1 教师信息处理 1.2 教师工作量数据处理&#xff1a; 1.3 教师综合信息输出 2. 需求分析 3. 模块设计 3.1 功能模块 3.2 所有功能模块的流程图 二、设计与实现 1. 程序设计 1.1 教师工作量管理系统 1.2 登录系统 1.3 主函数…

初级算法之字符串

344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 思路一: 从中间开始向两边遍历,然后两边交换位置,最终获得字符串的反转 // class Solution {public void reverseString(char[] s) {int len s.length,siz…