HTTP协议的基本格式

2023-05-16

目录

一、HTTP请求

 1.1 首行

1.1.1 URL

1.1.2 方法

1.2 请求报头(header)

1.2.1 host

​编辑

1.2.2 Content-Length和Content-Type

1.2.3 User-Agent

1.2.4 Referer

1.2.5 Cookie

1.3 请求正文(body)

1.3.1  application/x-www-form-urlencoded

 1.3.2 application/json

1.3.3  multipart/form-data

二、HTTP响应

2.1 首行

2.1.1 状态码


HTTP协议是一个应用层的协议。主要用于浏览器和web服务器之间的交互。

一、HTTP请求

下面就是一个HTTP请求的抓包结果。它包含了三个部分。

1.首行。也叫请求行,包括方法、url、版本。

2.请求报头(header)。请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分。

3.空行。表示请求报头的结束。

4.请求正文(body):空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有 一个Content-Length属性来标识Body的长度。

 1.1 首行

在上图,就是一个HTTP请求的首行。 首行包含三个部分,三个部分之间使用空格来区分。

1.1.1 URL

URL俗称网址,是一个唯一的资源定位符。表示互联网上的唯一的资源位置。描述了一个互联网上的具体地址。

这个就是一个标准的URL的基本格式。接下来我来一一介绍其组成部分。

1.http :协议方案名。表明这个网站所使用的协议名。在示例中使用的应用层协议是http。

2.user:pass :为登录信息(认证)。但是现在已经不用了。

3.www.example.jp:服务器地址。可以是一个ip地址,也可以是一个ip。

4.80:服务器端口号。端口描述的是哪一个程序。

5.dir/index.htm:带层次的文件路径。可以通过这个找到程序管辖下的哪个文件。

6.uid=1:查询字符串(query string)。获取资源时候带的参数,以 ?开头,以键值对的方式组织。键值对之间使用 & 分割。键和值之间使用 = 分割。

7.ch1:片段标识符。

注意:1.对于http来说,默认端口号是80,对于https来说,默认端口号是443。

           2. / 也是路径,这个并没有省略,只是有点短,代表的是HTTP服务器的根目录。

1.1.2 方法

在我们上面的抓包结果中,首行里我们可以看见一个GET单词。其实这个就是一个方法,方法就描述了这次请求的语义(想干什么)。

上图就是HTTP协议中的方法。虽然有如此多的方法,但是GET和POST方法是最常见的方法。其他方法非常少见。 

1. GET请求

在浏览器的地址栏里直接输入URL、html里的link,script,img,a等标签、通过js来构造GET。这些都是属于产生GET请求的方式。GET请求使我们最常见的一种请求。

接着我们来看,第一张是GET请求的图片,第二张是POST请求的图片,你能看出来他们的结构有什么不同吗? 

 通过对比发现,POST请求的空行后面还有一个部分,这个部分叫做body。而GET这里则是两行空行,没有body。因此我们说,POST请求一般有body,GET请求一般没有body。  

2.POST请求

POST请求一般是在登录网站、上传文件的时候产生的请求。

 上图就是一个POST请求。我们可以看到POST请求由四部分组成。分别为:首行、请求报头(Header)、空行、请求正文(body)。

注意:1.GET也可以给服务器传递一些信息,GET传递的信息一般在query String里。而POST传递信息则是通过body。(不代表GET没有body,POST没有query string)。

           2.GET请求一般是用于服务器获取数据,POST一般是用于给服务器提交数据。

           3.GET通常会被设计成幂等的,POST不要求幂等(习惯上)。

           4.GET可以被缓存,POST则一般不能被缓存。

1.2 请求报头(header)

下图就是一个header,它是一堆键值对组成的。每一行是一个键值对。键和值之间使用 : 分割。并且这些键值对都是HTTP协议提前定义好的,每个都有各自特定的含义的。 

下面我就挑几个比较关键的来说明一下。

1.2.1 host

下面就是一个host,这里的host是一个域名,但它可以是一个ip地址也可以是一个ip地址+端口号。它大概的描述了服务器所在的地址和端口。host这里的地址和端口是用来描述你最终要访问的目标的(可能和url不一样)。

1.2.2 Content-Length和Content-Type

下图就是Content-Length和Content-Type。其中Content-Length表示请求中body中的数据长度。Content-Type是用来描述请求中body中的数据格式。

上图中Content-Length为117,则表示body的长度为117字节。Content-Type描述了body是用json来进行组织的,字符集为UTF-8。

 注意:1.如果是GET请求,没有body,则请求中没有这两个字段。但是如果是POST请求,有     body,则有这两个字段。

            2.Content-Type的取值非常多,有text/html、text/css、image/png等等。

1.2.3 User-Agent

下图是一个User-Agent ,它主要就是描述了当前操作系统和浏览器的版本。

User-Agent原来主要是来区分浏览器版本的。因为当时的浏览器有的只支持文本,有的支持不图片,有的支持视频,有的全部都支持。因此开发者就在做网页的时候,就要考虑是否要在该浏览器上带上视频、图片等等。因此就用User-Agent来区分浏览器的版本。

而现在我们主要使用User-Agent来区分设备是PC端还是移动端。

1.2.4 Referer

Referer是描述当前页面的“来源”。下图就是一个Referer: 

如果直接通过地址栏输入地址,或者直接点击收藏夹这种操作,一般是没有Referer的。只有从一个页面跳转到这个页面,这种有“上家”的操作,才会有Referer。

1.2.5 Cookie

Cookie本质上是浏览器给网页提供的本地存储数据的机制。网页默认是不被允许访问计算机的硬盘的,但是浏览器又需要在本地存储一些东西。因此就出现了Cookie,Cookie就相当于是浏览器对于网页访问硬盘做出了明确的限制。下图就是一个Cookie:

 注意:1.Cookie是通过键值对的方式来存储数据的。但是其内容不止是键值对,同时还有一个过期时间,它描述了一个Cookie可以保存多长时间。

            2.Cookie是从哪来的:Cookie中的数据是来自于服务器的。服务器会通过HTTP响应的报头部分(Set-Cookie)把服务器要返回的字段放入Cookie中。服务器来决定浏览器的Cookie来存储什么。

            3.Cookie是在哪存的:存在于硬盘的。Cookie在存储的时候是按照 浏览器+域名维度来细分的。因此不同的浏览器又不同的Cookie,同一个浏览器不同的域名,也对应不同的Cookie。

            4.Cookie要到哪里去:Cookie最终会回到服务器去。客户端会通过Cookie来保存当前用户使用的中间状态。当客户端访问浏览器的时候,就会自动的把Cookie的内容带入到请求中。服务器就可以知道现在的客户端是什么样子。

1.3 请求正文(body)

请求正文的内容格式和Content-Type息息相关。下面我罗列了几个常见的情况。

1.3.1  application/x-www-form-urlencoded

使用Fiddler抓取学习通看视频请求

这个正文就用的是x-www-form-urlencoded格式写的。

 1.3.2 application/json

抓取登录时刻的请求。

 

此正文就是用json格式写的。

1.3.3  multipart/form-data

抓取网站的上传简历请求。

 

次正文就是用form表单格式写的。

二、HTTP响应

下图是一个HTTP响应报文,其是由四个部分组成。 

第一部分是首行,第二部分是header,第三部分是空行,第四部分是body。

2.1 首行

下面是一个首行:

 其中HTTP/1.1 为版本号。200 为状态码,OK为状态码描述。

2.1.1 状态码

HTTP状态码,它描述了这次相应的结果(成功/失败以及原因是什么)。 此图就是所有的状态码合集,在此篇文章中我们只挑几个比较重要和常见的进行认识。 

200:OK,表示响应成功了。

404:NOT FOUND,表示访问的资源不存在,在服务器上没有找到。

403:Forbidden,表示访问被拒绝(没有访问权限)。

302:Move temporarity,表示临时重定向,方便进行网站的迁移。

500:服务器内部错误(服务器代码抛异常了)。

504:Gateway Timeout,服务器响应时间超时。

HTTP响应的报头、空行和正文部分与HTTP请求的基本一致,这里就不再赘述。接下来给大家整理了一下HTTP协议的报文格式:

 

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

HTTP协议的基本格式 的相关文章

  • Python爬虫是什么?

    首先要知道python爬虫是一个程序 xff0c 这个程序的目的就是为了抓取万维网信息资源 xff0c 比如你日常使用的谷歌等搜索引擎 xff0c 搜索结果就全都依赖爬虫来定时获取 了解一个python爬虫离不开了解一下爬虫的基本原理 xf
  • 【struct和class的区别】

    在C中struct有以下特征 xff1a 1 C中的struct是一种数据类型 xff0c struct内不能包含函数 2 C中struct不能为空 在C 43 43 中的struct和class的区别 在c 43 43 中将struct的
  • clion的安装、汉化与配置

    这里我们就来详细介绍一下CLion的安装 汉化 激活以及配置吧 xff01 xff01 目录 一 安装1 下载安装包2 开始安装 二 汉化三 配置 xff08 MinGW xff09 1 官网下载MInGW2 开始配置 四 检验 一 安装
  • 串口通信+实例编写

    一 通信接口背景知识 1 处理器与外部设备通信的两种方式 并行通信 xff1a 传输原理 xff1a 数据各个位同时传输 优点 xff1a 速度快 缺点 xff1a 占用引脚资源多 xff08 例如 xff1a A向B进行传输时一次性可以用
  • keil手把手创建文件

    工具 xff1a Keil4 下面我们来认识一下如何创建一个Keil代码工程 首先我们在文件管理器中创建一个文件夹 然后我们打开Keil软件 xff0c 找到Project gt New Project 自定义一个名字保存 xff0c 然后
  • 1183 连接字符串

    题目描述 输入两个字符串 xff0c 设计函数连接这两个字符串 单个字符串的长度不超过100 不要使用系统提供的strcat函数 输入要求 输入2个字符串 xff0c 每个字符串以换行符结束 输出要求 输出连接好的字符串 输入样例 Coun
  • 路劲规划与轨迹跟踪学习4——人工势场法

    本文参考 85条消息 路径规划 局部路径规划算法 人工势场法 xff08 含python实现 c 43 43 实现 xff09 CHH3213的博客 CSDN博客 人工势场法路径规划 路径规划与轨迹跟踪系列算法学习 第6讲 人工势场法 哔哩
  • STM32 HAL库详解(二):UART

    在stm32编程时 xff0c 最常用的通讯方式就是串口通讯 一般使用HAL库来实现串口通讯 但有时 xff0c 我们不满足于HAL库的代码 xff0c 或者出现 玄学bug 需要了解具体原理来debug 下面将通过详解HAL库函数来解释u
  • C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句

    内容目录 十进制如何转化为十六进制 思路解析 运用知识点 代码实现 1 十进制如何转化为十六进制 十六进制每位数上从大到小是0123456789ABCDEF 十进制转化为十六进制与十进制转化为八进制一样求法 xff0c 就是求余 例如十进制
  • 实测(一) NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

    开发环境 xff1a NX 43 Ubuntu18 04 43 ROS melodic 一 ARM架构下 Realsense D435i 环境搭建 因为NVIDIA Xavier NX是一款arm架构的嵌入式开发板 xff0c 因此安装方式
  • c/c++输入带空格、tap、换行符的字符串

    1 scanf charstr 10 scanf 34 s 34 str 123 adw 其实只输入了 123 1 不读入空格和回车还有tap键 从空格处结束 2 输入字符串长度超过字符数组元素个数不报错 xff0c 只是不读入 3 当输入
  • 如何防止网站被爬虫爬取的几种办法

    相较于爬虫技术 xff0c 反爬虫实际上更复杂 目前许多互联网企业都会花大力气进行 反爬虫 xff0c 网络爬虫不但会占据过多的网站流量 xff0c 导致有真正需求的用户没法进入网站 xff0c 另外也有可能会导致网站关键数据的外泄等现象
  • 指定位置插入字符串(c++insert函数、find函数使用)

    一 insert函数 xff08 插入函数 xff09 str1 61 str1 xff08 被插入字符串 xff09 insert 插入位置 str2 xff08 被插入字符串 xff09 xff0c n xff0c m ps xff1a
  • vector容器(C++黑马程序员笔记)

    3 2 vector容器 3 2 1 vector基本概念 功能 vector数据结构和数组非常相似 xff0c 也称为单端数组 vector与普通数组区别 不同之处在于数组是静态空间 xff0c 而vector可以动态扩展 动态扩展 并不
  • set容器(c++黑马程序员笔记)

    3 8 set multiset容器 3 8 1 set基本概念 简介 所有元素都会在插入时自动被排序 本质 set multiset属于关联式容器 xff0c 底层结构是用二叉树实现 set和multiset区别 set不允许容器中有重复
  • map函数

    3 9 map multimap容器 3 9 1 map基本概念 简介 map中所有元素都是pair pair中第一 个元素为key 键值 xff0c 起到索引作用 xff0c 第二个元素为value 实值 所有元素都会根据元素的键值自动排
  • 解决Maven配置本地仓库路径不生效问题多个方法详解。(已成功解决自己遇到的问题)

    首先我尝试了很多种方法 xff0c 就是这个方法让我成功 xff0c 和大家分享一下 xff01 xff08 我用方法二成功的 xff01 xff09 maven本地仓库默认值 xff1a 用户家目录 m2 repository 由于本地仓
  • Servlet快速学习和Tomcat快速部署(web)

    Servlet快速学习和Tomcat快速部署 xff08 web xff09 一 快速入门二 执行流程三 生命周期四 Servlet体系结构五 Servlet urlPattern配置六 XML配置方式编写Servlet七 Tomcat快速
  • 蓝桥杯必备模板(python)

    蓝桥杯必备算法模板 xff08 python xff09 xff1a 前缀和模板差分模板二分双指针位运算最大公约数和最小公倍数模板判断质数和埃氏筛法模板唯一分解定理和质因数分解关系和模板快速幂并查集区间合并回溯算法模板 xff1a DFS
  • 蓝桥杯必备模块及常用操作(python)

    蓝桥杯必会模块 xff08 python xff09 xff1a 字符类型模块日期函数模块 常用 优先级队列itertools模块collections模块Bisect模块List 集合set 集合Math模块 字符类型模块 先看点常用但比

随机推荐

  • string的几个常见库函数

    文章目录 前言一 strlen直接求字符串长度二 strcpy用来赋值三 strcat追加字符串四 strcmp用于比较两个字符串五 strstr子串查找六 strtok应用七 加长度限制八 strerror 九 其他操作1 iscntrl
  • vector详解

    在开始学习C 43 43 的STL之后 xff0c 相信大家都学会通过查文档来了解一些库函数 xff0c 今天我来给大家介绍vector xff0c 从基本的使用到vector背后的源码实现 xff0c 迭代器等展开讲 xff0c 仔细阅读
  • 如何利用开源思想开发一个SEO友好型网站

    当你对一个网站进行 SEO 优化的时候 xff0c 不要期望你的努力能立即得到回报 耐心等待并更正内容营销策略 xff0c 最终会发现你的网站很受用户欢迎 下面就教你如何利用开源思维开发一个SEO友好型网站 xff01 首先 xff0c 你
  • 【STM32】串口通讯USART串口中断配置

    目录 STM32 USART 简介 程序编写 硬件接线 实际波形 STM32 USART 简介 STM32的USART通用同步异步收发器是一个串行通信设备 xff0c 可以灵活的与外部设备进行全双工数据交换 有别于USART xff0c 还
  • openmv第三天之标记跟踪

    AprilTag是一个视觉基准系统 感觉就是一个可以定位 校准帮助openmv来找到 定位的东西 官方解释的用处 xff1a 简单来说 xff0c 只要把这个tag贴到目标上 xff0c 就可以在OpenMV上识别出这个标签的3D位置 xf
  • 【A_star三维路径规划】A_star算法无人机三维路径规划【含Matlab源码 1387期】

    一 A star算法简介 0 引言 随着现代技术的发展 飞行器种类不断变多 应用也日趋专一化 完善化 如专门用作植保的大疆PS X625无人机 用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机 以及用作水下救援的白鲨MIX水下无人机等
  • 【路径规划】A_star算法机器人动态避障路径规划【含Matlab源码 1033期】

    一 A star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息 启发信息经过文字提炼和公式化后转变为启发函数 启发函数可以表示自起始顶点至目标顶点间的估算距离 也可以表示自起始顶点至目
  • C语言打印输出字符串的几种方法

    思路分析 知识点补充 1 xff0c 在C语言中 xff0c 一维数组的数组名实际上就是指向数组首项元素的指针 2 xff0c 如果指针p已经指向一个字符串 xff0c 判断字符串是否结束 xff0c 一般采用while p 61 39 0
  • 对‘fmt::v9::detail::throw_format_error(char const*)’未定义的引用

    在学习视觉SLAM十四讲第十二章的过程中 xff0c 尝试跑了一下单目稠密地图构建的代码 xff0c 在编译源代码的过程中遇到该问题 xff0c 编译结果中显示长篇的 CMakeFiles dense mapping dir dense m
  • [STM32F103C8T6] 串口

    1 非中断串口发送数据 串口发送 接收函数 xff1a HAL UART Transmit 串口发送数据 xff0c 使用超时管理机制 HAL UART Receive 串口接收数据 xff0c 使用超时管理机制 HAL UART Tran
  • 【C语言】strcat函数_字符串追加/连接

    前言 xff1a 在C C 43 43 的学习过程当中一定一定要多刷题 xff0c 牛客网作为国内内容超级丰富的IT题库 xff0c 尤其是它的C C 43 43 xff0c 有从入门到大厂真题 xff0c 而且大部分的考试题目也是从中抽取
  • SWUST OJ448: 字符串查找

    题目描述 在一段句子中找出给定字符串出现在句子中第一个字母出现的位置 句子中字符个数小于4500 字符串字符个数小于120 输入 两行 第一行是给定字符串 第二行是句子 输出 整数 xff0c 字符串出现的位置 样例输入 abcde thi
  • C语言十进制转十六进制

    输入 xff1a 123 输出 xff1a 7B include lt stdio h gt int main int n scanf 34 d 34 amp n int a 100 int count int i 61 0 while 1
  • CentOS软件那么老为什么大家还要用它?

    作为一个专业的服务器系统 xff0c RHEL 系统理论上每一个软件包都有 RedHat 内部的人员负责维护 xff0c 这个维护包括长期 xff08 和系统生命周期一样长 xff09 的开发 更新 测试 运维等 也就是说你能从 RHEL
  • vscode配置C/C++调试环境

    转自作者知乎的原创文章 vscode配置C 43 43 调试环境 在环境变量path中添加mingw中bin后 在vscode界面侧边栏点击调试界面 xff0c 创建launch json文件 添加配置后保存就行 下为我的添加配置后自动生成
  • ROS通信机制~话题通信(Publisher&Subscriber)·笔记2

    系列文章目录 xff1a ROS开发 xff08 ubuntu xff09 笔记 1 嘻 嘻的博客 CSDN博客 ROS通信机制 服务通信 server amp client 笔记3 嘻 嘻的博客 CSDN博客 话题通信 理论模型 xff1
  • postman Windows的详细安装过程

    1 首先去postman官网下载postman 官网地址 xff1a Download Postman Get Started for Free https www postman com downloads 2 根据你浏览器下载的所在位置
  • 数据结构链表的结构体定义的理解(C语言)

    此理解有参考数据结构的教材和一些博主的文章 xff1b 1 先补充一下typedef在此处的基本用法 xff1a typedef可用来建立已经定义好的数据类型的别名 形式为 xff1a typedef 已有变量名 别名 通俗的来说就是给已有
  • ROS安装与Rviz的摄像头视频采集与标定

    文章目录 一 ROS的安装与配置1 添加 ROS 软件源 xff0c 将下列命令输入到 Ubuntu 的终端执行2 添加密钥 xff0c 将下列命令输入到 Ubuntu 的终端执行3 安装desktop full4 初始化rostep5 设
  • HTTP协议的基本格式

    目录 一 HTTP请求 1 1 首行 1 1 1 URL 1 1 2 方法 1 2 请求报头 xff08 header xff09 1 2 1 host 编辑 1 2 2 Content Length和Content Type 1 2 3