做网站运营经理的要求,怎么建立网站,行业网站模版,网页游戏平台在线玩什么是 http
http 是一个应用层协议#xff0c;全称为“超文本传输协议”。 http 自 1991 年诞生#xff0c;目前已经发展为最主流使用的一种应用层协议。
HTTP 往往基于传输层的 TCP 协议实现的#xff0c;例如 http1.0#xff0c;http1.0#xff0c;http2.0
http3 是…什么是 http
http 是一个应用层协议全称为“超文本传输协议”。 http 自 1991 年诞生目前已经发展为最主流使用的一种应用层协议。
HTTP 往往基于传输层的 TCP 协议实现的例如 http1.0http1.0http2.0
http3 是基于UDP 协议实现的目前还在完善中我们目前主要使用的还是 http1.1 和 http2.0 版本本文章将以 http1.1 来进行展开。 http 的 工作流程
抓包工具 Fiddler
Fiddler 主要用来抓取 http 和 https 的数据包我们可以通过 fiddler 来进行抓包学习 http 和 https
使用也很简单按住 ALT A全选然后可以使用 删除键来进行删除所有抓到的包 简单介绍一下不同颜色对应的是什么数据报红色说明发生了错误蓝色表明一个包含 html 的数据包绿色说明是包涵 js 的数据报紫色则是包含 css 的数据包。
我们点击一下蓝色的数据包会发现右边出现了两个面板右上的面板是http 的 请求内容右下的是 http 的响应内容。
选择 Raw 然后点击 View in Notepad 就可以在记事本查看请求的内容。 查看响应先点击 Raw然后点击上面的黄色的条进行解析最后点击 View in Notepad 就可以查看响应的内容。 抓包工作原理实际上 fiddler 相当于一个 “代理”类似于中间商浏览器的 http 请求的数据本来是发送给服务器的因为我们开启了 fiddler 在中间会多加一个停留点也就是浏览器和服务器之间多了 fiddler二者传输的数据都要通过 fiddler 所以 fiddler 才能抓取 http 的数据包。
http 协议格式
请求包含首行请求头空行和正文
请求的数据包不一定包含正文的 响应包含首行响应头空行和正文 协议格式总结 右边的 Response 的请求正文是响应正文打错字了。 http 请求的分析
在http 的请求的首行里包含 请求方法 url http 的版本号
url
url 就是我们平时说的网址URLUniform Resource Locator 唯一资源定位符
互联网上的每一个文件都有一个唯一的 URL它包含的信息置出了文件的位置以及浏览器应该怎么处理它。 http 是我们使用的协议现在大多数你看到的是 https 协议这是后话了。url 不是只用 http 能使用url 可以给各种协议提供支持的。
之后会跟上 IP 地址和端口号一般来说这里的位置信息为了用户方便记忆使用域名来充当域名和 ip 是可以通过 DNS 域名解析系统来实现的DNS 既是一套服务器系统也是一种应用层协议
在IP后面可能会跟上带层次的文件路径
后面跟的是查询字符串Query String 对要访问的资源进行补充说明使用的是键值对结构键值对与键值对之间使用 来进行分割键和值之间使用等号 来进行分割。
键值对是由程序员自主定义的。
片段标识符一般用于文档的阅读就是你在网站访问官方网站阅读官方手册的时候会使用片段标识符说明你此时阅读的是哪一页的内容。
urlencode
由于 url 本身就携带特殊字符例如 /
如果查询字符串 query string 的内容如果包含上面的特殊字符就会导致 url 解析错误为了防止这一现象的出现这里使用了 urlencode 来进行转码把每一个字节转为 16进制的数据并且在前面使用 % 来进行分割。
举个例子在百度搜索 C会得到下面的 url https://www.baidu.com/s?ieUTF-8wdC%2B%2Btn15007414_dg
%2B 就是 转码而来的。 在百度搜索 “你好”会发现 url 没有转码但是我们通过 fiddler 抓包的时候确确实实是发生了转码的为了方便用户观看浏览器 url 显示的是没有进行转码的 “你好”但是实际传输给服务器的 url 是发生过转码的
https://www.baidu.com/s?ieUTF-8wd%E4%BD%A0%E5%A5%BDtn15007414_dg 但是在我们Java服务器写的时候我们不需要进行转码的代码书写因为 Spring 帮我们自动转码好了。 请求的方法 在开发中我们最常用的是 GET 和 POST 方法。其次是 PUT 和 DELETE 方法
GET 与 POST 重点
GET 方法一般是向服务器发送请求使用的一般使用 query string 来向服务器传输数据GET 方法一般 body 部分为空也可以不为空GET 也不是完全不能带 body (有些客户端/浏览器不支持)。
POST 方法一般是服务器向客户端发送的响应数据包使用的方法通过 body 来传输响应内容。
GET 和 POST 可以混用
GET请求通常建议设计成 幂等POST 则没有要求这是 HTTP 标准文档给出的建议不是强制要求幂等是指请求一定的等到的响应也是一定的例如支付环节中你付了多少钱就会相应地扣除多少钱
GET 设计成 幂等就可以 允许 GET 请求的结果被缓存POST 由于不要求幂等所以结果不能被缓存但是现在开发中 GET 不幂等的情况很常见GET 和 POST 方法也经常被混着用。 网上的一些错误的说法 POST 比 GET 更安全在登录场景中输入用户名和密码使用 GET 方法用户名和密码就会放到 url 的 query string 里面也就是显示在浏览器的地址栏上。
POST 方法也就是把 用户名和密码放到了 body 里面我随便抓个包不都看到了吗安不安全这个问题考虑的是“加密传输”。如果POST 传输数据没有加密这就不安全了。
GET 传输的数据是有长度限制的在上古时期的 IE 浏览器时代对 url 的长度是有限制的但是限制主流的浏览器已经不存在这个问题了比较长的 url 很多时候我们也能见到。
GET 只能传输文本POST 可以传输二进制GET 确实 url 只能放文本但是可以将二进制 通过 base64 转码成文本。
请求报头header
header 的状体的格式是 “键值对” 结构每个键值对占一行键和值之间使用分号分割报头的种类有很多这里只介绍常见的几种。
Host
Host 表示服务器主机的地址和端口 Content-Length 与 Content-Type
Content-Length 表示 body 的数据长度Content-Type 表示 body 的数据格式这两个要么同时存在要么都不存在。如果 http 请求没有包含 body 就不会有这两个。如果有 body 但是没有这两个 header (哪怕只有其中一个 header)都是错误的 / 非法的 http 报文。 User-Agent (UA)
UA 表示的是浏览器 / 操作系统的属性 在互联网发展早期的时候有些浏览器只能显示文本不支持更多的功能后来网页引入了图片、样式、js…
在同一时间段内有些用户的浏览器版本比较低很多页面的功能不能支持也有一些用户的浏览器更新过了能支持更多的功能因此为了区分不同用户使用的设备通过 UA 就可以知道用户的设备最多支持哪些特性到了今年浏览器已经大差不差了现在 UA 的用途主要是区分用户使用的是 手机还是 PC 端然后服务器根据不同的设备返回不同的网页。
Referer
表示这个页面是从哪个页面跳转过来的
如果直接咋爱浏览器输入 URL 或者通过收藏夹访问页面时是没有 Referer 的。 Cookie
Cookie 中存储了一个字符串这个数据可能是客户端 (网页) 自行通过 JS 写入的也可能来自于服务器 (服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据) Cookie 的数据都是程序员自定义的内容。
Cookie 有一个经典的应用场景是登录和用户认证 http 响应解析
在 http 首行里包括了 http 版本号状态码以及状态码描述
状态码
状态码表示访问一个页面的结果. (是访问成功还是失败还是其他的一些情况…) 下面我们只介绍几种常见的状态码
200 OK
表示访问正常。
404 Not Found
表示访问的资源没找到 403 Forbidden
访问被拒绝了没有权限
405 Method Not Allowed
说明客户端的请求的方法和服务器这边声明的注解不匹配。
在JavaEE部分 会给大家演示
500 Internal Server Error
服务器出现错误。
504 Gateway Timeout
Gateway 是网关的意思也就是网络的入口
当服务器负载比较大的时候服务器处理单条请求的时候消耗的时间就会很长就可能会导致出现超时的情况.
302 Move Temporarily
临时重定向
永久重定向. 当浏览器收到这种响应时后续的请求都会被自动改成新的地址. 302 也是通过 Location 字段来表示要重定向到的新地址.
301 Moved Permanently
永久重定向
永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址. 301 也是通过 Location 字段来表示要重定向到的新地址.
小结
2xx 表示成功 3xx 表示重定向 4xx 表示客户端出错用户构造的请求有问题 5xx 表示服务器出错Java程序员主要关注这个错误修 bug