计算机网络HTTP协议(格式报头请求响应)

落花踏尽游何处,笑入胡姬酒肆中。这篇文章主要讲述计算机网络HTTP协议(格式报头请求响应)相关的知识,希望能为你提供帮助。
【计算机网络HTTP协议(格式报头请求响应)】@TOC
了解HTTP协议HTTP协议的用途HTTP 协议格式 1、协议格式UDP :报头 (源端口,目的端口,长度,校验和)+载荷
UDP / TCP / IP 这些协议都是属于 “二进制” 的协议,经常要理解到二进制的 bit 位
HTTP 则是一个文本格式的协议 (不需要去理解具体的二进制位,而只是理解文本的格式即可) (文本格式,所以更方便于人肉眼来观察)
2、Fiddler抓包使用fiddler抓包看看

计算机网络HTTP协议(格式报头请求响应)

文章图片

我们打开一个浏览器,在观察这里状态,弹了很多信息出来。
计算机网络HTTP协议(格式报头请求响应)

文章图片

这个标签页的选项,就表示了当前使用什么样的格式来显示 HTTP 请求,咱们用的最多的就是 Raw 这个选项
选择 Raw 看到的就是 HTTP 请求数据的本体
选择其他的选项,相当于 Fiddler 对数据进行了一些加工,调整了格式
计算机网络HTTP协议(格式报头请求响应)

文章图片

HTTP 请求格式
计算机网络HTTP协议(格式报头请求响应)

文章图片

请求分成 4 个部分:
4、HTTP 响应格式
计算机网络HTTP协议(格式报头请求响应)

文章图片

三、HTTP 请求 (Request) 详细解释
计算机网络HTTP协议(格式报头请求响应)

文章图片

1、URL1.1 URL 基本格式
计算机网络HTTP协议(格式报头请求响应)

文章图片

1.2 URL encode / decode
那么为什么需要进行 encode?
计算机网络HTTP协议(格式报头请求响应)

文章图片

2、请求方法
计算机网络HTTP协议(格式报头请求响应)

文章图片

GET 方法
计算机网络HTTP协议(格式报头请求响应)

文章图片

POST 方法
计算机网络HTTP协议(格式报头请求响应)

文章图片

随着时间的推移,基本上GET /POST都没有考虑他们语义的事了,基本上都是一把梭…也就是这样,导致了多种HTTP方法之间的界限,就变得模糊了,GET 可以给服务器送东西,POST 也可以从服务器拿东西…
GET和 POST的区别
==第一句话,先盖棺定论!! GET 和 POST 没有本质区别!!!==
具体来说,相当于是 GET 能使用的场景,也能替换成 POST,POST 使用的场景,也能替换成 GET,但是细节上,还是有一些区别的
注意:网上典型的错误:
3、请求 “报头” (header)3.1 Host
Host: www.sogou.com。域名是可以通过 DNS 来转成 IP 地址的
3.2 Content-Length、Content-Type
这两个属性是在描述 body ,如果你的请求里就没有 body(GET),也就不需要这两个字段了!!!
一般 POST 都是带 body,一般登录都是基于 POST 来实现的!!
计算机网络HTTP协议(格式报头请求响应)

文章图片

为什么登录,是使用 POST 实现?
Content-Type 常见选项:
  1. application/x-www-form-urlencoded: form 表单提交的数据格式. 此时 body 的格式形如:
title=test& content=hello

  1. multipart/form-data : form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" 通常用于提交图片/文件. body 格式形如:
Content-Type:multipart/form-data; boundary=---- WebKitFormBoundaryrGKCBY7qhFd3TrwA------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name=“text”title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name=“file”; filename=“chrome.png” Content-Type: image/pngPNG … content of chrome.png … ------WebKitFormBoundaryrGKCBY7qhFd3Trw

  1. application/json : 数据为 json 格式. body 格式形如
“username”:“123456789”,“password”:“xxxx”,“code”:“jw7l”,“uuid”:“d110a05ccde64b16a861fa2bddfdcd15”

关于 Content-Length 的补充:
3.2 User-Agent (简称 UA)
例如:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko)Chrome/91.0.4472.77 Safari/537.36

计算机网络HTTP协议(格式报头请求响应)

文章图片

3.4 Referer
计算机网络HTTP协议(格式报头请求响应)

文章图片

Referer: https://gitee.com/login

Referer 这个东西也是一个非常有用的字段,广告系统,按点击计费 ! !
计算机网络HTTP协议(格式报头请求响应)

文章图片

计算机网络HTTP协议(格式报头请求响应)

文章图片

3.5 Cookie
因此当前就是采取这样的策略:
这里的小黑屋,有多种不同的形式。
其中 Cookie 是一个比较古老,也比较经典的形式,现代浏览器也支持一些其他的本地存储的方案
Cookie 就是浏览器给页面提供的一种能够持久化存储数据的机制 ,持久化指的就是,数据不会因为程序重启或者主机重启 而丢失 (写到磁盘里)
Cookie具体的组织形式:
计算机网络HTTP协议(格式报头请求响应)

文章图片

Cookie 数据从哪里来的:
计算机网络HTTP协议(格式报头请求响应)

文章图片

Cookie 里面保存身份信息,这件事,就类似去医院看病
这些关键信息,存储在服务器上,管这个东西称为 “session”,会话
服务器这里管理着很多很多的 session
每个 session 里面都存储了用户的关键信息 (基本信息,要做的检查,以往病例…),每个 session
也有一个 sessionld (会话的标识)
就诊卡上其实存储的是这个会话的 id
计算机网络HTTP协议(格式报头请求响应)

文章图片

这个东西看起来就很像是一个 sessionld
服务器就可以根据这个数据,来找到用户对应的会话,进一步获取到用户的详细情况
cookie 这里存的键值对,也是和 query string 类似,也都是程序猿自定义的,外人不知道,看不懂
关于 Session 会话的理解:
总结:
4、正文 body正文中的内容格式非常灵活,取决于 header 中的 Content-Type
下面可以通过抓包来观察这几种情况:
  1. application/x-www-form-urlencoded 和 query string 一样键值对结构,键值对之间使用 & 分隔,键和值之间使用 = 分割,并且要进行 url encode
抓取码云上传头像请求
avatar=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAPgAAAD4CAYAAADB0Ss LAAAg…

  1. multipart/form-data 上传文件
抓取信息页面
------WebKitFormBoundary8d5Rp4eJgrUSS3wTContent-Disposition: form-data; name=“file”; filename=“李星亚 java开发工程师.pdf” Content-Type: application/pdf%PDF-1.7 %3 1 0 obj < < /Names < < /Dests 4 0 R> > /Outlines 5 0 R /Pages 2 0 R /Type /Catalog> > endobj 3 0 obj < < /Author ( N v~N?) /Comments () /Company () /CreationDate (D:20201122145133+06’51’) /Creator ( W P S e [W) /Keywords () /ModDate (D:20201122145133+06’51’) /Producer () /SourceModified (D:20201122145133+06’51’) /Subject () /Title () /Trapped /False> > endobj 13 0 obj < < /AIS false /BM /Normal /CA 1 /Type /ExtGState /ca 1> > endobj

  1. application/json 构成的键值对,键值对之间使用逗号分割,键和值之间使用 : 分割
抓取登陆页面
“username”:“123456789”,“password”:“xxxx”,“code”:“u58u”,“uuid”:“9bd8e09ea27b48cdacc6a6bc41d9f462”

四、HTTP 响应 1、状态码 (status code)
计算机网络HTTP协议(格式报头请求响应)

文章图片

  • 最常见的状态码
计算机网络HTTP协议(格式报头请求响应)

文章图片

2、响应 “报头” (header)Content-Type
请求 和 响应中的 Content-Type ,是不一样的。
响应中的 Content-Type 常见取值有以下几种:
@

    推荐阅读