Http详解

一、什么是Http协议

Http全称为超文本传输协议,是目前使用最主流的
应用层协议
在这里插入图片描述

二、Http工作过程

当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送⼀个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回⼀个 HTTP 响应.
在这里插入图片描述

三、Http协议格式

HTTP 是⼀个⽂本格式的协议. 可以通过 Chrome 开发者⼯具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节。

3.1抓包工具使用

以 Fiddler 为例。
在这里插入图片描述
抓到的界面:
在这里插入图片描述
在这里插入图片描述

3.2抓包结果分析

3.2.1HTTP请求

在这里插入图片描述
1.首行格式:
Method:请求方式,GET/POST
URL:请求地址
Version:版本号
2.请求报头格式:
Key: value…
3.空行:空行就相当于是 “报头的结束标记”, 或者是"报头和正文之间的分隔符"。
4.请求正文
在这里插入图片描述

3.2.2HTTP响应

在这里插入图片描述
1.首行格式:
Version:Http版本号
状态码
状态码描述
2.响应报头格式:
Key: value…
3.空行:空行就相当于是 “报头的结束标记”, 或者是"报头和正文之间的分隔符"。
4.响应正文
在这里插入图片描述

四、HTTP请求

4.1请求地址URL

在这里插入图片描述
1.协议名:常见的有http和https,也有其他类型存在
user:pass:这部分现在已经不使用了
2.域名:域名会通过 DNS 系统解析成⼀个具体的 IP 地址。
3.端口号:定位到某台电脑的某个程序
4.文件路径:带层次的文件路径,找到去访问程序里面的哪个页面/接口
5.参数:查询字符串(query string)。本质是⼀个键值对结构,键值对之间使⽤ “&” 分隔;键和值之间使用 “=” 分隔。其中的 key 和 value 的取值和个数,完全都是程序猿自己约定的。
6.片段标识:"#"后是某个控件的id

4.2请求方法

分类:
在这里插入图片描述

4.2.1GET

常用于获取服务器上的某个资源(例如查询用户列表)
特点:
1.首行的第⼀部分为 GET
2.URL 的 query string 可以为空, 也可以不为空.
3.header 部分有若⼲个键值对结构.
4.body 部分为空.
**GET请求有URL长度限制:
HTTP协议标准对URL长度是没有限制的,但是实际 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现。在浏览器端,不同的浏览器最⼤⻓度是不同的,但是现代浏览器支持的长度⼀般都很长;在服务器端,⼀般这个⻓度是可以配置的。

4.2.2POST

多用于提交用户输⼊的数据给服务器(例如登陆页面)。
特点:
1.首行的第⼀部分为 POST
2.URL 的 query string ⼀般为空 (也可以不为空)
3.header 部分有若干个键值对结构
4.body 部分⼀般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由 header 中的 Content-Length 指定.

4.2.3常见面试题:GET和POST的区别

● 语义不同: GET ⼀般⽤于获取数据, POST ⼀般用于提交数据
● GET 的 body ⼀般为空, 需要传递的数据通过 query string 传递, POST 的 query string ⼀般为空,需要传递的数据通过 body 传递。
● GET 请求⼀般是幂等的, POST 请求⼀般是不幂等的. (如果多次请求得到的结果⼀样, 就视为请求是幂等的)。
● GET 可以被缓存, POST 不能被缓存. (这⼀点也是承接幂等性)。
● 浏览器通常对GET是有最大长度限制的,对POST是没有限制的
● 安全性不同。通常GET是将参数直接显示在url地址上的,而POST是放在body部分的,相对来说POST更安全一点。

4.3请求报头

4.3.1Host

表示服务器主机的地址和端⼝.

4.3.2 Content-Length

表示 body 中的数据长度,验证数据传输过程是否丢失。

4.3.3Content-Type(重要)

表示请求的 body 中的数据格式.
常见选项:
1.application/x-www-form-urlencoded: form
表单提交的数据格式,此时Body的数据格式,形如:
title=test&content=hello

2.multipart/form-data:
表单提交的数据格式,通常用于提交图片/文件。
Body格式形如:
在这里插入图片描述

3.application/json:
数据为 json 格式,Body格式形如:
在这里插入图片描述
在这里插入图片描述

json 格式说明:
在这里插入图片描述

4.3.4 User-Agent (简称 UA)

表示浏览器的属性

4.3.5Referer

表示从哪个页面跳转过来

五、HTTP响应

重点讲解以下两个方面:

5.1状态码

在这里插入图片描述
常见的状态码:

5.1.1 200 OK表示访问成功

在这里插入图片描述

5.1.2 404 Not Found 没有找到资源

在这里插入图片描述

5.1.3 403 Forbidden访问被拒绝

表示访问被拒绝. 有的页面通常需要用户具有⼀定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.
在这里插入图片描述

5.1.4 500 Internal Server Error

服务器出现内部错误,⼀般是服务器的代码执行过程中遇到了⼀些特殊情况(服务器异常崩溃)会产生这个状态码.

5.1.5 504 Gateway Timeout

当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很⻓, 就可能会导致出现超时的这种情况在双十一等 “秒杀” 场景中容易出现, 平时不太容易见到情况.

5.1.6 302 Move temporarily

临时重定向
理解 “重定向”
就相当于⼿机号码中的 “呼叫转移” 功能.
比如我本来的⼿机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友
知道新号码,只要我去办理⼀个呼叫转移业务, 其他⼈拨打 186-1234-5678 , 就会⾃动转移到 135-1234-5678 上.

5.1.7 301 Moved Permanently

永久重定向. 当浏览器收到这种响应时, 后续的请求都会被⾃动改成新的地址.301 也是通过 Location 字段来表示要重定向到的新地址.

5.1.8总结

在这里插入图片描述

5.2响应报头

响应报头的基本格式和请求报头的格式基本一致。类似于 Content-Type,Content-Length 等属性的含义也和请求中的含义⼀致。
响应中的 Content-Type 常见取值有以下几种:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值