HTTP基础知识整理

知识地图

在这里插入图片描述

发展历史

  • 20世纪60年代 美国国防部高等研究计划署(ARPA)建立了 ARPA 网
  • 20世纪70年代,基于ARPA,发明出了TCP/IP协议
  • 20世纪80年代,TCP/IP协议被纳入UNIX内核
  • 1989年,任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了超文本协议的构想,他把这个系统称之为world wide web(万维网),就是我们现在的WEB。其中包含三项核心技术
  1. URI:即统一资源标识符,作为互联网上资源的唯一身份;
  2. HTML:即超文本标记语言,描述超文本文档;
  3. HTTP:即超文本传输协议,用来传输超文本。
  • 20世纪90年代初,HTTP0.9诞生,只支持get请求,纯文本内容,只读
  • 1993年,NCSA(美国国家超级计算应用中心)开发出了 Mosaic,是第一个可以图文混排的浏览器
  • 1996年,HTTP1.0诞生,增加了HEAD、post请求,以及引入了http header概念,增加了响应状态码,增加了版本号概念,内容不再局限于纯文本,但是HTTP1.0不是一个规范,只是一个指引,或者说支持的特性,没有强制性约束,因此未形成统一标准
  • 1999年,网景和微软的浏览器大战后,HTTP1.1规范发布,成为了业界标准,增加了以下主要内容:
  1. 增加了PUT DELETE等方法
  2. 增加了缓存控制
  3. 允许持久链接
  4. 允许请求分块(chunked),利于大文件传输
  5. 强制要求HOST头,让互联网主机托管成为可能
  • 2015年,互联网标准化组织在基于谷歌的SPDY协议,制定了HTTP2协议,主要改动如下:
    传输内容变成二进制,不再是纯文本
    允许服务器主动向客户端推送数据
    但是目前大部分网站使用的还是HTTP1.1协议
  • 2018年,基于谷歌QUIC协议的HTTP3已经提上日程,未来可能直接跨过HTTP2,直接普及HTTP3

HTTP 是什么

超文本传输协议

协议

明确参与者的权责
约定内容格式、语法等
约定如何发起、处理、结束,以及各种情况下的处理方式

传输协议

明确这是用于计算机之间传输内容的协议

超文本

超越文本的文本,或者超级文本。
内容不仅限于文字符号,还包含图片、视频等,但对于HTTP来说,都是“文本”
文本中可以含有超链接,通过超链接可以指向其他文本

HTTP相关的几个概念

TCP/IP协议

TCP/IP协议是HTTP的基石, HTTP over TCP/IP

IP协议(Internet Protocol)

规定了互联网设备之间的寻址、路由方式,以及数据包的传输方式。
IP地址是IP协议中重要的部分

TCP协议(Transmission controll protocol)传输控制协议

位于IP协议之上,用于保证传输数据的完整性和可靠性

DNS(Domain name system)域名系统

由于IP地址不便于记忆,因此使用域名
域名系统有多级,如文章开头的图中所示。解析域名时,会逐级查找,类似于查找分级索引

URI/URL
英文缩写英文全称中文描述
URIuniform resouce identifier统一资源标识符,代表每一个具体的图片、某一条数据的唯一标识,由“协议名 + 主机名 + 路径”构成,俗称 URL,但俗称是不严谨的
URLuniform resource locator统一资源定位符,是URL的子集,也就是“某一种具体的URI”,除了标识资源外,还提供定位信息
HTTPS http over SSL/TLS
SSL/TSL协议

SSL 即secure socket layer(安全套接层协议),发展到3.0时被标准化并更名为TLS,即transport layer security (传输层安全协议),其实是同一个东西,但是习惯性上叫SSL
SSL是在TCP/IP协议上面又套了一层,所以最终HTTPS是
HTTP over SSL/TLS over TCP/IP

PROXY 代理

通俗理解为中介,通常分为几种:

  • 匿名代理,隐匿了雇主的信息,对方只知道中介的信息,不知道雇主的信息
  • 透明代理,对方即知道中介的信息,又知道后面的雇主的信息
  • 正向代理,雇主是请求发起者,即request方,如常用的上网代理软件HAProxy做的就是正向代理
  • 反向代理,雇主是服务端,即response方,如常用nginx来做负载均衡,nginx做的就是反向代理

除了普通的中介工作之外,代理还可以实现缓存、压缩传输提高效率、安全保护等功能

TCP/IP协议的四层模型

应用层–传输层–网际层–链接层

  • 链接层(link layer)负责传输最原始的数据包,传输的单位是帧(frame),通过mac地址来定位
  • 网际层(internet layer)把MAC地址翻译成IP地址,并组成各类网络(如局域网),传输的单位是包(package),通过IP地址来定位(实际上会把IP地址翻译成MAC地址,把package拆成frame,交给链接层)
  • 传输层(transport layer)负责保证数据的完整性和可靠性,TCP协议(还有UDP协议,不过跟HTTP无关)就在这一层
  • 应用层(Application layer)基于前面的三层,再封装一些面向具体应用的信息的协议。这一层的协议有SSH\SMTP\FTP\TELNET\等
OSI(open system interconnection reference model)开放系统互连通信参考模型

这里有“参考”两个字,说明不是强制的,因为TCP已经在很大程度上成了实际标准,所以国际标准组织(ISO)并没有强制要求将TCP四层模型改成OSI七层模型

  • 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
  • 第二层:数据链路层,它基本相当于 TCP/IP 的链接层;传输基本数据包
  • 第三层:网络层,相当于 TCP/IP 里的网际层;使用IP来组网
  • 第四层:传输层,相当于 TCP/IP 里的传输层;保障数据传输的可靠性、完整性
  • 第五层:会话层,维护网络中的连接状态,即保持会话和同步;
  • 第六层:表示层,把数据转换为合适、可理解的语法和语义;
  • 第七层:应用层,面向具体的应用传输数据。

与四层模型的映射关系如下图:
在这里插入图片描述

四层负载均衡

在第四层传输层上做的负载均衡,通过IP+PORT进行转发

七层负载均衡

在第七层应用层上做的负载均衡,通过IP+PORT+应用的信息(如URL、请求方式等)

HTTP协议栈的工作流程

文本数据—>HTTP协议包装一层HTTP的头信息—>TCP协议包装一层TCP的头信息—>IP协议打上IP头信息—>MAC层大上MAC头信息
—>到达接收方的MAC层,拆包,拆掉MAC头信息—>到达接收方的IP层,拆掉IP头信息—>以此类推,最后目标应用拿到文本数据

域名解析的顺序

浏览器缓存>>操作系统缓存>>HOSTS>>本地DNS>>根DNS>>顶级DNS>>权威DNS,最终返回域名对应的IP

HTTP协议的报文内容

请求报文

  • 起始行 (start line) 例如:GET /images/1.jpg HTTP/1.1 包含了请求方法(GET)、URI( /images/1.jpg)、协议版本(HTTP/1.1 )
  • 请求头(header)HOST Accept 等,KV形式的信息集合。除了HOST信息之外,其他请求头都是可以为空的
  • 空行(CRLF)用于隔开请求头和请求体,空行后面的都会被当做请求体
  • 请求体(entity)可为空

响应报文

  • 状态行(status line) 例如: HTTP/1.1 401 Unauthorized 包含了协议版本、状态码、状态信息说明
  • 响应头(header) Server、Content-Type 等 也是KV形式的信息集合
  • 空行(CRLF)用于隔开响应头和响应体,空行后面的都会被当做响应体
  • 响应体(body)可为空

状态码

五类状态码

RFC 标准把状态码分成了五类,用数字的第一位表示分类

  • 1XX 提示信息,表示请求还没处理完,还需要后续操作
  • 2XX 成功,数据已被收到且被正确处理
  • 3XX 重定向,告诉客户端一个新的地址,让客户端重新发送请求到新的地址
  • 4XX 客户端的请求有错误,服务端无法处理
  • 5XX 服务器处理请求时发生了错误
3XX 不同重定向状态码的区别
  • 301(Moved permanently)告诉客户端,以后要访问目标资源时,都请访问新地址。浏览器会做缓存,下次会直接访问新地址
  • 302(Moved Temporarily) 临时重定向。例如网站维护期间,临时指向维护提示页面。维护完了之后,还是会回到之前的地址
  • 304(Not Modified)表示资源没有被修改,可以使用客户端缓存,不需要重新获取(也就是告诉客户端,可以重定向到客户端自己的缓存)

HTTP的请求方法

标准方法

  • GET 获取资源
  • POST 上传/新增资源
  • DELETE 删除资源(不一定是物理删除,由接收者最终决定处理方式)
  • PUT 类似POST,一般是修改资源
  • HEAD 获取资源的元信息,也就是不要响应体,只要响应头
  • TRACE 追踪请求 - 响应的传输路径
  • CONNECT 建立连接通道
  • OPTIONS 列出可以进行的操作(比如可以进行PUT、DELETE等)

扩展方法

MKCOL、COPY、MOVE、LOCK、UNLOCK、PATCH等等
也可以基于自己的需求,扩展自定义的方法

HTTP的优缺点

  • 简单易扩展 请求报文简单,对请求方法、请求内容格式等没有严格的要求,可拓展性非常强。容易上手学习,所以很容易被应用、推广
  • 明文传输 便于抓包分析,但是也容易被窃取隐私
  • 不安全 由于是明文传输,所以容易被窃取。没有严格的身份认证机制,容易被仿冒,钓鱼等。所以出现了HTTPS
  • 性能尚可,但还不够好 由于TCP/IP协议的自身机制,如请求-应答模式,以及3次握手,4次挥手等,导致性能不够好
  • 无状态 是优点也是缺点。好处在于,服务器不必保存状态,使得集群部署更容易。坏处在于部分需要状态的应用场景,需要自己实现状态机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值