HTTP协议格式

一、HTTP协议的概念

💌💌💌HTTP协议即超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议 . 所有的WWW文件都必须遵守这个标准.它是一种使用非常广泛的 应用层协议💕💕💕, 往往是基于传输层的😸😸 TCP 协议来实现的.

二、HTTP 协议格式

💡想要获取HTTP协议的请求和响应,可以通过 Chrome 开发者工具(F12)或者 Fiddler 工具进行抓包,注意,要想通过 Fidder 抓取 HTTPS 的包,就要信任它的证书.

💯方法:进入Fiddler 工具后,点击 TOOls——>Options——>HTTPS,全部勾选.

这里,我们访问 CSDN 官网进行请求和响应的抓取.

1.请求

🌐首行: 方法名+URL+版本号。
🌐Header部分: 表示请求的属性, 遇到空行则结束, 每组属性之间使用换行分隔,键和值之间用 “:+空格” 进行分隔.
🌐Body部分: Header后面的内容就是Body. 如果Body存在, Header里会有一个Content-Length属性来标识Body的长度;如果是一段html代码, 那么html页面内容就是在body中,当然Body部分也可以省略.

GET https://www.csdn.net/ HTTP/1.1
Host: www.csdn.net
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: “Google Chrome”;v=“107”, “Chromium”;v=“107”, “Not=A?Brand”;v=“24”
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525110_37481495260-1635435-799719!5744; dc_session_id=10_163906.280412; _ga=GA1.2.1574059973.164470; _ga_VHSCGE70LW=GS1.1.16444.3.1.1643.0;

此处的URL: https://www.csdn.net/
🐶https : 表示协议名. 常见的有 http 和 https, 还有一些其他的类型. (例如 java 访问 mysql数据库时用的
jdbc:mysql:// ).
🐶www.csdn.net : 表示服务器地址, 也可以用域名来表示.打开命令行窗口(cmd)
输入命令:ping www.csdn.net,就可以看到 CSDN 的真实 IP 地址为 60.205.172.2.

🎇🎇🎇 注意:有的电脑会提示 ping 不是内部或外部命令,也不是可运行的程序或批处理文件. 说明电脑的ping 命令是关闭的,此时手动打开就行.

🐶端口号: 此处CSDN 的端口号被省略了, 浏览器则会自动根据协议类型使用某个端口. http 协议默认端口号为80; https 协议默认端口号为443.
再次点击一个文章进去,此时请求的URL端口号后面一般就是带层次文件路径.

https://mp.csdn.net/mp_blog/manage/article?spm=3001.5298

spm=3001.5298: 表示查询字符串(query string), 键和值之间使用 = 分隔. 当有多个键值对的时候,使用 & 分隔.

🐻🐻🐻HTTP 协议中设置 “空行” 的原因:
因为我们并不知道 Header 部分的键值对有多少个. 空行就相当于是 “报头的结束标记”.
第二,HTTP 在传输层依赖 TCP 协议实现, TCP 是面向字节流的. 如果没有空行, 就会出现 “粘包问题”,分不清报文从哪里结束.

2.响应

🌐首行: 版本号+状态码+状态码描述.
🌐Header部分: 表示请求的属性, 遇到空行则结束, 每组属性之间使用换行分隔,键和值之间用:+空格进行分隔.
🌐Body部分: Header后面的内容就是Body内容. 如果Body存在, Header里会有一个Content-Length属性来标识Body的长度;如果是一段html代码, 那么html页面内容就是在body中,当然Body部分也可以省略.

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Server: openresty
Vary: Accept-Encoding
X-Response-Time: 358
x-content-type-options: nosniff
x-download-options: noopen
x-readtime: 358
Strict-Transport-Security: max-age=31536000
Content-Length: 671142

< content=“CSDN博客,CSDN学院,CSDN论坛,CSDN直播”> meta name=“description” content=“CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区.”>

三、常见的Header属性

👁️‍🗨️1.Host
Host: www.csdn.net
表示服务器主机的地址和端口. 此处CSDN 的端口号被省略了,浏览器则会自动根据协议类型使用某个端口. http 协议默认端口号为80; https 协议默认端口号为443.

👁️‍🗨️
2.Content-Length
表示 body 中的数据长度.

👁️‍🗨️
Content-Type

表示请求的 body 中的数据格式. 主要有 json 格式,form表单提交格式.

👁️‍🗨️User-Agent
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
其中 Windows NT 10.0; Win64; x64 表示操作系统信息, Chrome/107.0.0.0 Safari/537.36 表示浏览器信息.

👁️‍🗨️Referer
表示这个页面是从哪个页面跳转过来的. Referer: https://www.csdn.net/

如果直接在浏览器中输入URL, 或者直接通过书签访问页面时是没有 Referer 的. 这个属性一般用来计算广告费,我们平时用的微信,短视频等软件,虽然用户没有交钱,但是只要从固定网站进去,此时广告商就得给此互联网公司付费,谁拥有更多的流量,广告商就喜欢投入到那里.

👁️‍🗨️Cookie

Cookie: LCLKINT=6092; SNUID=BBCAD9735653BDEA9BE7B2AF5775B2E1; ABTEST=5|1668340251|v17; SUID=CD9C8E241431A40A000000006370DA1B; browerV=3; osV=1

Cookie属性一般存储用户的“身份标识”,有些网站用户私密权限的内容其他用户是访问不了的.实际存储的是一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器. 不同的网站Cookie值都是不一样的, 这样是为了增加隔离性,保护系统的安全.

四、GET和POST方法

1.GET方法的特点

GET方法一般用于向服务器获取数据,例如图片,js文件的获取.

  • 首行的第一部分为 GET .
  • URL 的 query string 可以为空, 也可以不为空.
  • header 部分有若干个键值对组成.
  • body 部分为空.
2. POST方法的特点

POST方法一般用于向服务器提交数据. 例如登录页面,from表单的提交.

  • 首行的第一部分为 POST .
  • URL 的 query string 一般为空, 也可以不为空.
  • header 部分有若干个键值对组成.
  • body 部分一般不为空. body 内的数据格式通过 body 的长度由 header 中的 Content-Length 表示,数据格式由 header 中的 Content-Type 来表示.
3.GET和POST之间的区别

💡 本质没有区别的,但是程序员之间为了增强代码的可读性和可维护性,默认形成了一种行业习惯.

  • GET一般从服务器获取数据.POST一般向服务器提交提交数据.
  • GET主要通过query string 来传递数据, POST则是使用body传递数据.
  • GET一般是实现成"幂等的",POST一般不实现成"幂等’. 幂等:用于表示任意多次请求执行的结果均与一次请求执行的结果相同,例如查询账户余额,要是一直变主人你的心里什么感觉.
  • GET 可以被缓存, POST 不能被缓存.

注意:POST 比 GET 更安全,这种说法是错误的. 虽然 POST一般在 body 里面传输数据,但是安全性的话,如果进行中间人攻击还是可以拿到数据, 判断协议是否安全,要根据破解难度来判断.

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web图解

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值