百度k了网站怎么办,常州个人做网站,国际域名和国内域名区别,聊城做网站优化网络原理— HTTP 1. 什么是HTTP? HTTP(全称为超文本传输协议)是一种应用非常广泛的应用层协议#xff1a;
HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现) 我们平时打开一个网站#xff0c;就是通过HTTP协议来… 网络原理— HTTP 1. 什么是HTTP? HTTP(全称为超文本传输协议)是一种应用非常广泛的应用层协议
HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现) 我们平时打开一个网站就是通过HTTP协议来传输数据的 当我们在浏览器中输入一个搜狗搜索的网址(URL)时 浏览器就给搜狗的服务器发送了一个HTTP请求搜狗的服务器返回了一个HTTP响应 这个响应结果被浏览器解析之后就展示成我们看到的页面内容. 这个过程中浏览器可能会给服务器发送多个HTTP请求服务器会对应返回多个响应这些响应里就包含了页面HTML, CSS, JavaScript, 图片字体等信息 所谓超文本的含义就是传输的内容不仅仅是文本(比如html,css这个就是文本)还可以是一些其他的资源比如图片视频音频等二进制的数据. 2. 理解应用层协议 我们已经学过TCP/IP已经知道目前数据能从客户端进程经过路径选择 跨网络 传送到 服务器端进程 [IPPort]
可是仅仅把数据从A点传送到B点就完了吗? 这就好比在淘宝上买了一部手机 卖家[客户端] 把手机通过 顺丰[传送路径选择] 送到 买家[服务器] 手里就完了吗? 当然不是买家还要使用这款产品 在买家使用之后给卖家打分评论。 所以我们把数据从 A端 传送到 B端 TCP/IP 解决的是顺丰的功能两端还要对数据进行加工处理或者使用
因此我们还需要一层协议不关心通信细节关心应用细节!这层协议叫做应用层协议。
一般情况下应用是有不同的场景的所以应用层协议是有不同种类的其中经典协议之一的 HTTP 就是其中的佼佼者。 再回到我们刚刚说的买手机的例子 顺丰相当于[TCP/IP]的功能 那么买回来的手机都附带了说明书【产品介绍使用介绍注意事项等】; 该说明书指导用户该如何使用手机此时的说明书可以理解为用户层协议 3. 理解HTTP协议的工作过程 当我们在浏览器中输入一个网址此时浏览器就会给对应的服务器发送一个HTTP请求.
对方服务器收到这个请求之后经过计算处理就会返回一个HTTP响应. 事实上当我们访问一个网站的时候可能涉及不止一次的 HTTP请求/响应 的交互过程
可以通过 chrome 的开发者工具观察到这个详细的过程 通过F12打开 chrome 的开发者工具切换到Network标签页 然后刷新页面即可看到如下图效果每一条记录都是一次HTTP请求/响应 注意 当前搜狗主页是通过 https 来进行通信的https 是在 http 基础之上做了一个加密解密的工作后面再介绍. 4. 通过抓包工具 fiddler 查看 HTTP协议格式 HTTP 是一个文本格式的协议
可以通过Chrome开发者工具或者Fiddler抓包分析HTTP请求/响应的细节 4.1 抓包工具的使用 以Fiddler为例Fiddler下载地址
可以使用搜狗浏览器下载避免下载时发生其他应用捆绑下载 安装过程比较简单一路next即可 接下来设置 fiddler 让它支持 HTTPS 值得一提在首次安装 fiddler 并且勾选上面的选项时会弹出是否信任 fiddler 的根安全证书一定要点 yes 否则只能卸载并且重新安装 显示请求的原始数据 如果要放大请求中的字体可以用记事本打开 上面是查看请求的原始数据下面就是查看响应的原始数据 在响应的详细信息右下角的框中出现乱码是因为这些信息是经过压缩后的数据
如果要看完整的详细信息就点击Response body is encoded. Click to decode这个黄色按钮 点开后响应信息解压缩可以通过文本打开进一步查看信息 4.2 抓包工具的原理 Fiddler相当于一个代理 浏览器访问 sogou.com 时就会把HTTP请求先发给 FiddlerFiddler 再把请求转发给 sogou 的服务器当 sogou 服务器返回数据时Fiddler 拿到返回数据再把数据交给浏览器 因此 Fiddler 对于浏览器和sogou服务器之间交互的数据细节都是非常清楚的. 4.3 抓包结果 以下是一个HTTP请求/响应的抓包结果 HTTP请求 首行
[方法][url][版本] Header (请求头)
请求的属性冒号分割的键值对每组属性之间使用\n分隔遇到空行表示 Header 部分结束 Body:
空行后面的内容都是BodyBody允许为空字符串.如果Body存在则在Header中会有一个Content-Length属性来标识 Body 的长度 HTTP响应 首行
[版本号][状态码][状态码解释] Header (响应头):
请求的属性冒号分割的键值对每组属性之间使用\n分隔遇到空行表示 Header 部分结束 Body:
空行后面的内容都是BodyBody允许为空字符串.如果Body存在则在Header中会有一个Content-Length属性来标识 Body 的长度如果服务器返回了一个 html页面那么html页面内容就是在body中. 4.4 协议格式总结 思考问题为什么HTTP报文中要存在 空行 ? 因为HTTP协议并没有规定报头部分的键值对有多少个 空行就相当于是报头的结束标记或者是报头和正文之间的分隔符 HTTP在传输层依赖TCP协议TCP是面向字节流的 如果没有这个空行就会出现粘包问题.