目录
HTTP
HTTP是什么
HTTP(全称为"超文本传输协议")是一种应用非常广泛的 应用层协议
HTTP协议是一问一答的模式
HTTP协议报文格式
可以通过Fiddler工具进行抓包来进行查看,抓包的结果就是一个HTTP报文格式的数据
抓包工具:Fiddler相当于是进行的一次代理操作
代理分为:正向代理/反向代理
eg:正向代理:我(客户端)找代理帮忙访问
反向代理:他(服务器)找代理帮忙接客
代理在客户端前面 → 正向代理(代理客户端)
代理在服务器前面 → 反向代理(代理服务器)
HTTP请求------协议格式:
- 首行:请求方法 url 版本号
- 请求头:(使用键值对的方式进行组织)
- 空行:标识请求头的结束
- 正文:有的有正文,有的没有正文

HTTP响应------协议格式:
- 首行:版本号 状态码 状态描述
- 响应头:(使用键值对的方式组织)
- 空行:标识响应头结束
- 正文:如果正文存在,则会在 Header 当中会有一个 Content-length 标识 正文的长度,如果返回了html页面,页面的内容也会放在正文当中

注意 :为什么HTTP报文当中要存在"空行"?
因为HTTP协议并没有规定报头部分的键值对有多少,空行就相当于是"报头的结束标记",或者是"报头与正文之间的分隔符"
HTTP请求
URL
url:互联网当中每个文件都会有一个唯一的URL
url的基本格式:http://user:pass@www.example.ip:80/dir/index.htm?uid=1#ch1
| http:// | user:pass | www.example.ip | 80 | dir/index.htm | uid=1 | ch1 |
|---|---|---|---|---|---|---|
| 协议名 | 登录信息(现在已经不会写在url当中) | 服务器地址 | 服务器端口号(如果没有写,浏览器会自动添加) | 带层次的文件路径(类似于目录) | 查询字符串 | 片段标识符 |
** 对上述部分信息进行解释 **
服务器地址:此处是一个"域名",域名会通过DNS系统解析成一个具体的IP地址
查询字符串:键值对的形式,完全由程序员自己决定
** 关于URL encode **
像/?:等字符,url已经有其他的理解了,所以这些字符不能随意出现,需要对参数中的字符进行转义(一个中文字符虽没有特殊含义,但还是需要转义,否则就会被浏览器当做url中的特殊符号)
需要进行转码,转化为16进制数据
认识方法
经常使用的:
| 方法 | 说明 |
|---|---|
| GET | 获取资源 |
| POST | 传输实体主体 |
| PUT | 传输文件 |
| DELETE | 删除文件 |
说明
-
GET是最常用的HTTP方法,用户获取服务器上的某个资源

上面就是一个GET方法
请求特点 :a. 首行第一部分为GET
b. URL 的 query string可以为空,也可以不为空
c. header 部分有若干个键值对结构
d. body为空(一般没有body数据)
-
POST方法,多用于提交用户输入的数据给服务器,通过HTML的form标签可以构造POST方法

请求特点a. 首行的第一部分为POST
b. URL的query一般也为空(也可以不为空)
c. header部分有若干键值对结构
d. body 部分一般不为空,body内数据格式是通过header中的 Content-type指定,body长度由header当中Content-Length指定
GET与POST区别
| 方法 | GET | POST |
|---|---|---|
| 语义不同 | 用于获取数据 | 用于提交数据 |
| query string 与body | body一般为空,通过query string传递 | query string一般为空,通过body传递 |
| 幂等性 | 一般是 | 一般不是 |
| 缓存 | 可以被缓存 | 不能被缓存 |
补充说明:幂等性解释:多次获取的结果是一样的
关于安全性:POST与GET相比,POST安全,但是不对的,因为之前会把密码放在url的query string当中
关于传输数据量:有人说传输的GET传输的数据量小,POST传输的数据量大,错误,现在完全取决于浏览器的限制
关于传输数据类型:有人说GET只能传输文本数据,POST可以传输二进制数据,【解释:GET确实url只能放文本,但可以把二进制数据通过转码转成文本的】
- 其他方法
DELETE:输出服务器指定资源
PUT与POST相似
认识请求"报头"(header)
header :格式使用"键值对"格式
Host :表示服务器主机的地址与端口 127.0.0.1:8080(比较常用的)
如果采用了代理模式,此处会发生变化
Content-Length :表示body当中数据长度
Content-type :表示请求body的数据格式:常见:form表单格式/json格式
User-Agent:简称UA,互联网早期,用于正确将内容显示到屏幕上
eg: mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko)
会有浏览器信息+操作系统信息(但现在用于区分用户设备,根据不同的设备返回不同版本的页面)
Referer:表示这个页面是从哪一个页面跳转过来的
eg:从百度当中点击广告,广告就需要给百度交钱(提供展示平台)
Cookie :可能来自服务器(在HTTP响应的header当中通过Set-Cookie返回数据)
往往这个字段被用于"身份标识的功能"
浏览器在展示页面的过程中,虽然可以实现通过js实现一些逻辑,但是是不能访问用户的硬盘资源的,但实际开发过程当中,有的时候是希望可以将某些不会太大变化的数据保存在本地硬盘
Cookie是浏览器允许网页在本地硬盘存储数据的一种机制

认识请求正文
正文的内容格式与 header当中的 Content-Type是密切相关的
- form表单
- json
HTTP响应
状态码
HTTP已经定义好了一些常见的状态码,常用的状态码如下:
| 状态码 | 含义 |
|---|---|
| 200 成功 | 正常返回实体 |
| 404 Not Found | 没有找到资源 |
| 403 Forbidden | 访问被拒绝,有的页面需要用户有一定的权限才可以访问 |
| 500 Internal Server Error | 服务器内部出现错误 |
| 504 Gateway Timeout | 网关时间过长 |
| 302 Move temporarily | 临时重定向 |
响应报头
Content-Type :常见取值text/html:body数据格式是HTML
text/css:body数据格式是CSS
application/javascript:body数据格式是JavaScript
application/json:body数据格式是JSON
响应正文
与Content-Type有着密切关系
以下我举了三个两个例子------都是可以通过抓包工具获取到的


以上就是HTTP的相关部分,都是必须要掌握的部分!