IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 浏览器原理 -- HTTP网络通信 -> 正文阅读

[网络协议]浏览器原理 -- HTTP网络通信

HTTP协议是一种建立在TCP传输层协议上的应用层协议,它规定了通信双方使用请求-响应模式和文本报文进行通信。

HTTP报文格式

//?请求报文
//?1.请求行
GET?/?HTTP/1.1
//?2.请求头
Host:?time.geekbang.org


//?3.请求头空两行之后是?请求体,可能包含表单或文件

//?响应报文
//?1.响应行
HTTP/1.1?301?Moved?Permanently
//?2.响应头
Date:?Fri,?25?Jan?2019?13:28:12?GMT
Content-Type:?text/html
Content-Length:?182
Connection:?keep-alive
Location:?https://time.geekbang.org/
Strict-Transport-Security:?max-age=15768000


//?3.响应头空两行之后是?响应体,可能一段HTML代码。

HTTP Method

请求方法描述
Get浏览器通过地址栏访问页面都是 GET 方法。
Post表单提交产生 POST 方法
CONNECTHTTP代理使用的方法。可通过服务器代理访问别的网站。现在多用于 HTTPS 和 WebSocket。

HTTP Status

状态码描述
1XX临时响应,表示希望客户端继续发送请求。(在HTTP库被处理)。
2XX请求成功。
3XX请求的目标有变化,希望客户端进一步处理。
301永久重定向。
302临时重定向。
304客户端缓存(页面、图片)没有更新。
4XX客户端出错。
403无访问权限。
404请求的资源(页面、接口)不存在。
5xx服务端出错。
500服务端错误。
503服务端暂时性错误,可以一会再试。

HTTP Header

Request Header描述
Host访问的目标地址。
Cookie存放Cookie字符串。
Connection指定是否复用TCP连接。HTTP/1.1默认是长连接,HTTP/1.0默认是短连接。
Cache-Control控制代理服务器缓存行为。no-cache:表示使用协商缓存;no-store:禁止使用缓存(包括强缓存和协商缓存);
If-Modified-Since第一次请求该资源返回的Last-Modify值服务器收到这个请求后,将 If-Modified-Since 和当前的 Last-Modified 进行对比。如果相等,则说明资源未修改,返回 304。否则返回200和新的数据。
If-None-Match上次访问该资源时服务器返回的ETag。如果服务端判断ETag没有变,则返回304。否则,返回200和新的ETag。
Accept浏览器接受的数据类型。例如:text/html。
Accept-Encoding浏览器接受的编码格式。例如:gzip。
Accept-Language浏览器接受的语言。
User-Agent客户端标识(浏览器标识、操作系统标识、浏览器内核标识)。
Response Header描述
Set-Cookie浏览器会把指定的Cookie保存到本地,下次请求时自动带上Cookie。
Expires本地缓存资源的过期时间。
Cache-Control控制客户端缓存行为。max-age:缓存的最大有效时间(秒);no-cache:表示使用协商缓存;no-store:禁止使用缓存(包括强缓存和协商缓存);public:默认设置;private:不能多用户共享,数据只能被指定用户缓存(通常指客户端)。如果需要HTTP认证,响应会自动设置为private。
ETag资源内容的摘要信息。是资源的唯一标识。搭配If-None-Match使用。
Last-Modified资源的最近一次更新时间(精确到秒)。搭配If-Modified-Since使用。
Content-Length内容长度。有利于浏览器判断内容是否已结束。
Content-Encoding内容编码方式。通常是gzip。
Via服务端的请求链路。常用于调试。
Date当前的服务器日期。
Server服务端类型。例如:Nginx、Tomcat。

HTTP Body

常见的请求体格式有:

  • application/json
  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/xml

使用 HTML 的 form 标签提交产生的 HTML 请求,默认会产生 application/x-www-form-urlencoded 的数据格式,当有文件上传时,则会使用 multipart/form-data。
HTTPS
HTTPS使用TLS加密通道来传输HTTP内容。 有两个作用,一是确定请求的目标服务端身份,二是保证传输的数据不会被网络中间节点窃听或者篡改。

HTTP2
HTTP 2.0 最大的改进有两点,一是支持服务端推送,二是支持 TCP 连接复用。

服务端推送能够在客户端发送第一个请求到服务端时,提前把一部分内容推送给客户端,放入缓存当中,这可以避免客户端请求顺序带来的并行度不高,从而导致的性能问题。

TCP 连接复用,则使用同一个 TCP 连接来传输多个 HTTP 请求,避免了 TCP 连接建立时的三次握手开销,和初建 TCP 连接时传输窗口小的问题。


浏览器缓存

WHAT

第一次访问某个网站时,浏览器会把样式文件和图片等满足条件的静态资源保存到本地,下次再访问该网站时,浏览器就可以使用本地缓存数据,而不需要每次都要网络请求数据。

WHY

合理地使用缓存,不仅可以加快页面访问速度,提升用户体验;还可以减少带宽消耗,节约成本

HOW

当浏览器在获取资源时,先判断本地缓存数据是否满足强缓存条件,如果是,就直接返回本地数据。否则,再判断是否满足协商缓存条件,如果是,就直接返回本地数据。如果这两者都不满足的话,再通过网络请求数据。

强缓存

强缓存的决策过程只发生在浏览器端,不需要跟服务器发生交互。

说明:

  • 涉及ExpireCache-Control两个HTTP Header(详见上文HTTP Header部分)。
  • Cache-Control比Expire优先级更高
  • Expire指的是服务器的时间,是一个绝对时间。如果客户端系统时间与服务器时间不一致,则会存在偏差。而Cache-Control使用的是相对时间max-age,不存在偏差。

协商缓存

协商缓存的决策过程发生在服务器端。浏览器在使用本地缓存数据前,需要先跟服务器确认数据是否已被更新。

说明:

  • 涉及EtagIf-None-Match、Last-ModifyIf-Modify-Since两对HTTP Header(详见上文HTTP Header部分)。
  • ETag比Last-Modify的优先级更高
  • Last-Modify的判断条件是资源的更新时间。时间精度是秒,如果资源在短时间内发生改变,Last-Modified并不会变化;当资源被多次修改后恢复原来的样子,此时Last-Modified改变了,但资源内容没有变化。
  • Etag的判断条件是资源的唯一标识符,可以更准确地判断资源是否更新。

:直接刷新页面会使用【协商缓存】,通过地址栏输入url使用【强缓存】。

缓存位置

缓存位置共四种,按优先级从高到低如下,当依次查找缓存且都没有命中的时候,才会去请求网络。

  • Service Worker
  • Memory Cache
  • Disk Cache
  • Push Cache
缓存位置说明
Service WorkerService Worker 是运行在浏览器背后的独立线程。通过拦截请求的方式,允许用户精细化缓存控制,包括:控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。
Memory Cache内存通常用于缓存当前页面包含的CSS、JS、PNG等资源。内存IO速度快,但无法持久化(Tab 页面关闭时,内存中的缓存也会被释放)。
Disk Cache硬盘存储 容量大且可以持久化,在缓存中使用最普遍。它会根据 HTTP Herder 中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。并且即使在跨站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。
Push CacheHTTP/2 中的内容。在国内不够普及。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:05:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:48:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码