HTTP协议【报文格式】
文章目录
- 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协议【报文格式】相关推荐
- 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )
文章目录 一.路由选择协议分类 二.BGP 协议 简介 三.BGP 协议 信息交换过程 三.BGP 协议 报文格式 四.BGP 协议 特点 五.BGP-4 协议的 四种报文 六.RIP .OSPF.B ...
- 三菱MELSEC 1帧协议报文格式。
关于三菱 MC 1E协议报文说明: 是不是1E协议可以发送:D100 .报文: 01ff0A00 64 00 00 00 20 44 0200 试试,返回报文:810000000000 报文格式: ...
- Bacnet协议报文格式详解(一)
系统实现基于BACnet/IP(又称B/IP)网络进行通讯.BACnet虚拟链路层(BVLL)提供了BACnet网络层和某指定的通讯子系统的接口,本文指定了BACnet虚拟链路控制(BVLC)要求支持 ...
- HTTP(超文本传输协议)报文格式
HTTP请求报文 http请求报文数据分为三部分: 请求行 请求头部 请求数据 http请求报文的格式如下图所示: 下面是Get请求的例子: GET /92316461213.jpg HTTP/1.1 ...
- MQTT协议详解及开发教程(四)MQTT协议报文格式
推荐一款稳定的基于C编写的MQTT Client开源库 cMQTT MQTT协议详解及开发教程(一)MQTT协议概述 MQTT协议详解及开发教程(二)MQTT服务器EMQx搭建 MQTT协议详解及开发 ...
- 计算机网络-传输层(UDP协议报文格式,伪首部,UDP校验过程)
文章目录 1. UDP协议 UDP报文格式 UDP校验过程 1. UDP协议 UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能. UDP的主要特点: UDP是无连接的,减少开销和发 ...
- http协议报文格式原理图
报文字段含义请参见:http协议报文字段含义
- 计算机网络11种协议报文格式
文章目录 TCP UDP IP IPV6 IPSec 以太网帧结构 802.1Q以太网帧结构 802.11无线链路帧 SSL记录 RTP实时传输协议 OpenFlow流表 参考 TCP 源端口号和目的 ...
- 详解 HTTP 协议报文格式 构造 HTTP 请求
目录 1. HTTP 协议 1.1 HTTP 协议格式 1.2 HTTP 请求 (Request) 1.2.1 认识 URL 1.2.2 关于 URL encode 1.2.3 认识 "方法 ...
- ARP/RARP协议报文格式
图6-1 ARP/RARP报头结构 ARP和RARP使用相同的报头结构,如图6-1所示. 图6-1中的各字段的具体含义如下: 硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1: 协议类型:指 ...
最新文章
- 暑期集训5:并查集 线段树 练习题A: HDU - 1232 ​​​​​​​
- 将mnist数据集存储到本地文件
- 新疆那些大学在计算机专业好,新疆哪些二本大学的计算机科学与技术专业最好?...
- 初识boost之boost::share_ptr用法
- 深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015
- [转载] LinkedIn架构这十年
- 美国互联网巨头在华发展10大败因
- 使用ISA实现用户级验证(1~3篇)
- php 安全基础 第七章 验证与授权 密码嗅探
- scripts文件夹_常用Scripts整理
- Pandas 中文文档
- 【python】集合的定义与操作
- 人脸方向学习(五):Face Recognition-ArcFace解读
- IE 和FF的一个细小差别
- 【论文阅读】基于光流的快速人体姿态估计
- django_filters实现数据过滤
- 优化华为云服务器采用Key登陆
- 对称矩阵的判定 C语言 SDUT
- 输出这个整数对应的拼音
- 博客变味:从一方净土沦落为企业枪手
热门文章
- 微信小程序 一 小程序的创建、宿主环境、常用组件、开发上线等
- Project中设置周六周日为工作日
- LaTeX生成复选框(打勾打叉),todo list
- 达达开放平台php,【即时配送】达达开放平台授权绑定提示“已开通其他渠道”?...
- 通俗易懂 spring aop demo
- ios-bug.html黑屏重启,苹果iOS系统更新出BUG 设备会无限重启
- 三国志战略版:吴骑替代品【骚包小蜀枪】
- Python对IP地址列表排序、对列表进行去重、IP地址与MAC地址组合的多个元组的列表排序,对列表内的元组升序和降序排序
- Ant design 表格字段排序
- 数据透视表 字段交叉_删除数据透视表的计算字段的宏