HTTP协议介绍
目录
一、HTTP协议基本概念
1、定义:
2、工作原理:
二、抓包工具Fiddler使用
1、下载地址:https://www.telerik.com/fiddler/
2、原理:
3、 使用方法:
4、抓包结果:
(1)请求
(2)响应
三、HTTP协议格式
1、协议格式总结
四、HTTP请求详解
1、URL
(1)基本格式:
(2)URL encode
2、方法
(1)GET请求的特点:
(2)POST请求的特点:
(3)二者区别:
3、请求报头
(1)Host
(2)Content-Length
(3)Content-Type
(4)User-Agent(简称UA)
(5)Referer
(6)Cookie
五、HTTP响应
1、状态码
2、常见状态码解释
一、HTTP协议基本概念
1、定义:
HTTP(超⽂本传输协议)是一种应用层协议,往往基于传输层的TCP协议实现;
2、工作原理:
简单来说就是“提问——回答”模式。
客户端(如浏览器)作为 “请求方”,明确告知服务器 “需要什么操作”(如获取网页、提交表单);服务器作为 “响应方”,根据请求内容处理后,返回 “操作结果”(如网页数据、成功 / 失败状态)。
二、抓包工具Fiddler使用
1、下载地址:https://www.telerik.com/fiddler/
2、原理:
抓包工具的作用相当于一个代理
浏览器访问sogou.com时,就会把HTTP请求先发给Fiddler,Fiddler再把请求转发给sogou的服务 器.当sogou服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器.
3、 使用方法:
左侧窗⼝显⽰了所有的HTTP请求/响应,可以选中某个请求查看详情。
右侧上⽅显⽰了HTTP请求的报⽂内容.(切换到Raw标签⻚可以看到详细的数据格式)
右侧下⽅显⽰了HTTP响应的报⽂内容.(切换到Raw标签⻚可以看到详细的数据格式)
4、抓包结果:
(1)请求
我们可以看到HTTP请求主要包含以下几个部分:
1、首行:方法+ URL+版本
2、请求头(header):键值对结构,每一行是键值对,键和值之间用:分割;
3、空行:用来表示header结束了
4、正文(body):有些请求有正文,有些请求没有正文
(2)响应
类似的,响应也包含以下几个部分:
1、首行:版本+状态码+状态码解释
2、响应头(header):也是键值对,和请求的键值对有区别,不过有的重要的键值对在请求和响应里面都存在
3、空行:标识header部分结束
4、正文(body):对于响应来说,body是一个HTML
三、HTTP协议格式
1、协议格式总结
结合上面抓包结果,我们可以总结出请求和响应的格式如下:
四、HTTP请求详解
1、URL
(1)基本格式:
可以省略的部分:
1、协议名:省略后默认为http://
2、ip地址/域名:在HTML中可以省略(⽐如img,link,script,a标签的src或者href属性).省略后表示服务器的ip/域名与当前HTML所属⼀致.
3、端⼝号:省略后如果是http协议,端⼝号⾃动设为80;如果是https协议,端⼝号⾃动设为 443
4、带层次的⽂件路径:省略后相当于/ 有些服务器会在发现/路径的时候⾃动访问 /index.html
5、查询字符串:可以省略
6、⽚段标识:可以省略
查询字符串(query string) :也是键值对结构,键值对之间用&分割,键和值之间用=
(2)URL encode
URL encode是一种将 URL 中特殊字符转换为特定格式的编码方式,目的是确保 URL 能被正确传输和解析。
转义的规则:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式
例如:
2、方法
这几种方法我们不详细讲,最重要的就是GET和POST两个,因此,我们着重对比这两种方法
(1)GET请求的特点:
⾸⾏的第⼀部分为GET
URL的query string可以为空,也可以不为空.
header部分有若⼲个键值对结构.
body部分为空.
(2)POST请求的特点:
⾸⾏的第⼀部分为POST
URL的query string⼀般为空(也可以不为空)
header部分有若⼲个键值对结构.body部分⼀般不为空.body内的数据格式通过header中的Content-Type 指定.body的⻓度
由header中的Content-Length 指定.
(3)二者区别:
GET一般用于获取数据;POST一般用于提交数据(不是绝对的,GET也可以提交,POST也可以获取);
GET的body⼀般为空,需要传递的数据通过query string传递;POST的query string⼀般为空,需要传递的数据通过body传递;
GET请求⼀般是幂等的,POST请求⼀般是不幂等的;(如果多次请求得到的结果⼀样,就视为请求是幂等的);
GET可以被缓存,POST不能被缓存.(这⼀点也是承接幂等性).
3、请求报头
(1)Host
表示服务器主机的IP和端口号
(2)Content-Length
表示body中的数据长度
(3)Content-Type
表示body中的数据格式
(4)User-Agent(简称UA)
表示浏览器/操作系统的属性
(5)Referer
表示这个页面是从哪个页面跳转过来的
(6)Cookie
浏览器在本地存储的一种方式,也是键值对
五、HTTP响应
1、状态码
状态码表⽰访问⼀个⻚⾯的结果.(是访问成功,还是失败,还是其他的⼀些情况...).主要有以下几大类:
2、常见状态码解释
(1)200:(成功) 服务器已成功处理了请求。
(2)404:(未找到) 服务器找不到请求的网页。
(3)403:(禁止) 服务器拒绝请求。
(4) 405:(方法禁用) 禁用请求中指定的方法。
(5)500:(服务器内部错误) 服务器遇到错误,无法完成请求。
(6)504:(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
(7)302:(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
(8)301:(永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。