HTTP协议介绍

发布于:2025-07-17 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

一、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 请求的响应)时,会自动将请求者转到新位置。

 


网站公告

今日签到

点亮在社区的每一天
去签到