HTTP协议的基本格式

HTTP协议的基本格式

什么是HTTP

HTTP(全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议

HTTP 往往是基于传输层的 TCP 协议实现的,其中HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP实现,这里是主要讨论的是HTTP 以 1.1 版本。

在这里插入图片描述

平时所用的网站就是通过HTTP来传输数据。

在这里插入图片描述
对于定义的理解:

1.为什么说是超文本: 因为传输的内容不仅可以是文本(html,css),还可以是其他资源(图片,视频,音频等二进制的数据)。
2.HTTP应用层协议的理解:可以把HTTP看作一个快递员,浏览器是发件人,服务器是收件人。快递员需要按照一定的规则来送快递,比如收件人的地址,邮编等,同样HTTP也需要按照一定规则来传输数据,比如请求方法,请求头,请求体等。浏览器向服务器发送请求,等同于发件人把快递给快递员;服务器响应浏览器的请求,就像收件人收到快递。HTTP协议规定了浏览器和服务器之间的数据传输方式,就像快递公司规定了快递员的工作流程。

在这里插入图片描述

我们可以通过Fiddler工具来 抓包, 分析 HTTP 请求/响应的细节。

对URL的认识

“网址” 其实就是说的 URL (Uniform Resource Locator 统一资源定位符).互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
在这里插入图片描述
一个具体的URL

在这里插入图片描述

1.https : 协议方案名. 常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的jdbc:mysql ),可以省略,省略后为http://;
2.user:pass : 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略;
3www.baidu.com : 服务器地址. 此处是一个 “域名”, 域名会通过 DNS 系统解析成一个具体的 IP 地址.
4.端口号: 上面的 URL 中端口号被省略了. 当端口号省略的时候, 浏览器会根据协议类型自动决定使用哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口,可以省略.
5./sugrec : 带层次的文件路径,可以省略,省略后为/
6.&prod=pc_his&from=pc_web… : 查询字符串(query string). 本质是一个键值对结构. 键值对之间使用& 分隔. 键和值之间使用 = 分隔;
7.片段标识: 此 URL 中省略了片段标识. 片段标识主要用于页面内跳转,可以省略.

关于query string

对于query string:query string 中的内容是键值对结构. 其中的 key 和 value 的取值和个数, 完全可以通过我们自己的约定决定. 我们可以通过这样的方式来自定制传输我们需要的信息给服务器.

例如:点个蛋炒饭外卖,外卖上备注不要葱,转成HTTP格式就是:
http://ip:port/蛋炒饭?葱=不要
后面的葱=不要就是一对query string

关于 URL encode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

在这里插入图片描述
“+” 被转义成了 “%2B”

HTTP请求

1.GET方法

GET是最常用的HTTP方法,常用于获取服务器上的某个资源,在服务器中直接输入URL,此时浏览器就会发送一个GET请求,另外HTML中的link,img,script等标签,也会触发GET请求。

利用抓包工具,观察GET请求

在这里插入图片描述

红框就是浏览器发送的GET请求

选中红框查看详细的请求结果

在这里插入图片描述

GET请求的特点:

1.首行的第一部分为GET

在这里插入图片描述

2.URL的query string可以为空,也可以不为空

a.这里的query string为空
在这里插入图片描述

b.这里的query string不为空在这里插入图片描述

3.header部分若干个键值对结构(下图为部分)

在这里插入图片描述

4.body部分为空

2.POST方法

POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面).通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用JavaScript 的 ajax 也可以构造 POST 请求.

利用抓包工具,观察POST请求

在这里插入图片描述

红框就是浏览器发送的POST请求

选中红框查看详细的请求结果

在这里插入图片描述

POST 请求的特点

1.首行的第一部分为 POST

在这里插入图片描述

2.URL 的 query string 一般为空 (也可以不为空)

这里query string 为空
在这里插入图片描述

3.header 部分有若干个键值对结构.(下图为部分)

在这里插入图片描述

4.body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的Content-Length 指定.

body部分
在这里插入图片描述

其他方法(了解)

PUT 与 POST 相似,只是具有幂等特性,一般用于更新
DELETE 删除服务器指定资源
OPTIONS 返回服务器所支持的请求方法
HEAD 类似于GET,只不过响应体不返回,只返回响应头
TRACE 回显服务器端收到的请求,测试的时候会用到这个
CONNECT 预留,暂无使用

HTTP响应

1.“状态码” (status code):状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…)

200 OK:这是一个最常见的状态码, 表示访问成功

访问百度页面的抓包结果
在这里插入图片描述

404 Not Found:没有找到资源

访问百度页面的抓包结果
在这里插入图片描述

403 Forbidden:表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403

下面是抓包结果
在这里插入图片描述

405 Method Not Allowed: HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等,但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法).

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

504 Gateway Timeout:当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况.

比如双十一秒杀的时候

302 Move temporarily:临时重定向…响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面.

以下是抓包结果
在这里插入图片描述

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

小结:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值