在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。
HTTP 发展史
HTTP/0.9
结构比较简单,为了便于服务器和客户端处理,它也采用了纯文本格式。
开发者最初设想 系统中获得文档都是只读的。只允许使用 GET 方法来获取文档中的内容 ,并在响应请求后立即关闭连接。功能非常有限。
HTTP/1.0 (可有可无的参考文档)
1993 年,NCSA(美国国家超级计算应用中心)开发出了 Mosaic,是第一个可以图文混排的浏览器,随后又在 1995 年开发出了服务器软件 Apache,简化了 HTTP 服务器的搭建工作。
确立了大部分现在使用的技术,但它不是正式标准;
变更点 :
- 增加了 HEAD、POST 等新方法;
- 增加了响应状态码,标记可能的错误原因;
- 引入了协议版本号概念;
- 引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;
- 传输的数据不再仅限于文本。
HTTP/1.1 (正式的标准)
1995 年,网景的 Netscape Navigator 和微软的 Internet Explorer 开始了著名的“浏览器大战”,都希望在互联网上占据主导地位。
是目前互联网上使用最广泛的协议,功能也非常完善
变更点 :
- 增加了 PUT、DELETE 等新的方法;
- 增加了缓存管理和控制
- 明确了连接管理,允许持久连接;(keep-alive)
- 允许响应数据分块(chunked),利于传输大文件;
- 强制要求 Host 头,让互联网主机托管成为可能
HTTP/2
基于 Google 的 SPDY 协议,注重性能改善,但还未普及;
变更点 :
- 二进制协议,不再是纯文本;通信单位为帧,二进制分帧
- 可发起多个请求,废弃了 1.1 里的管道;
- 使用专用算法压缩头部,减少数据传输量;
- 允许服务器主动向客户端推送数据;
- 增强了安全性,“事实上”要求加密通信。
HTTP 是什么
http不是一种服务,不是一种语言,不是一种网络。只是一种协议,一种约定。
协议 (协议是对参与者的一种行为约定和规范)
「协」字,代表的意思是必须有两个以上的参与者。例如三方协议里的参与者有三个:你、公司、学校三个;租房协议里的参与者有两个:你和房东。
「议」字,代表的意思是对参与者的一种行为约定和规范。例如三方协议里规定试用期期限、毁约金等;租房协议里规定租期期限、每月租金金额、违约如何处理等。
HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
传输
有两个最基本的参与者 A 和 B,从 A 开始到 B 结束,数据在 A 和 B 之间双向而不是单向流动。通常我们把先发起传输动作的 A 叫做请求方,把后接到传输的 B 叫做应答方或者响应方
第二点,数据虽然是在 A 和 B 之间传输,但并没有限制只有 A 和 B 这两个角色,允许中间有“中转”或者“接力”。
这样,传输方式就从“A<===>B”,变成了“A<=>X<=>Y<=>Z<=>B”,A 到 B 的传输过程中可以存在任意多个“中间人”,而这些中间人也都遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意的额外功能,例如安全认证、数据压缩、编码转换等等,优化整个传输过程。
HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
超文本
文本 : 表示 HTTP 传输的不是 TCP/UDP 这些底层协议里被切分的杂乱无章的二进制包(datagram),而是完整的、有意义的数据,可以被浏览器、服务器这样的上层应用程序处理。图片、视频、压缩包等,在 HTTP 眼里这些都算作「文本」。
超文本 : ,“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。
HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
HTTP 常见状态码
状态码 | 含义 |
---|---|
2xx | OK |
3XX | 重定向 |
4XX | CLIENT ERROR |
5XX | SERVER ERROR |
-
200 : OK 请求成功、请求的主体部分有请求资源
-
204 :Not Content 响应报文中包含若干首部和状态行,没有实际的主体部分。
-
301 :Moved Permanently 永久重定向,请求资源不存在 改用新的url 进行访问。
-
302 :found 请求资源还在,但是临时需要用另一个 URL 进行访问。
301 和 302 都会在响应头里使用字段
Location
,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
-
304 :not modified 请求的资源未修改,服务器返回此状态码时,不会返回任何资源。(用于缓存控制)
解释: 客户端 校验本地资源是否时最新的,未修改则从本地获取(缓存资源),重定向从服务器端到本地浏览器端获取资源 -
400 : bad request 请求语法错误 , 服务器无法理解。
-
403 :forbidden 请求被拒绝 , 服务端禁止访问资源。(权限或者其他原因)
-
404 :not found url 所对应的资源在服务器上无法找到。
-
500 :internal server eroor 服务器内部错误。
-
502 :bad gateway 网关或者 代理的服务器正常,在该服务器执行请求时,从后端服务器收到了一个无效响应。
-
503 : service Unavailable 服务器宕机或无法正常运行,无法为请求提供服务。
-
504 :gateway timeout 网关或代理服务器未及时从后端服务器获取请求。