写在前面:因为http的知识偏概念,所以只记录书中的重点内容,目的是建立web概念了解原理,也是为了在以后面试中能应付http方面得问题(例如三次握手是哪三次?)。
HTTP(Hypertext Transfer Protocol, 超文本传输协议①) 是在万维网上进行通信时
所使用的协议方案。 HTTP 有很多应用, 但最著名的是用于 Web 浏览器和 Web 服
务器之间的双工通信HTTP 使用的是可靠的数据传输协议, 因此即使数据来自地球的另一端, 它也能够
确保数据在传输的过程中不会被损坏或产生混乱。Web 服务器所使用的是 HTTP 协议, 因此经常会被称为 HTTP 服务器。
资源
资源: 在web传输中所有类型的内容来源都是资源。
-
MIME类型:(Multipurpose Internet Mail Extension, 多用途因特网邮件扩展, 读音:\卖姆\ )最初是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。 MIME 在电子邮件系统中工作得非常
好, 因此 HTTP 也采纳了它, 用它来描述并标记多媒体内容。-
当 Web浏览器从服务器中取回一个对象时, 会去查看相关的 MIME 类型, 看看它是否知道应该如何处理这个对象。 大多数浏览器都可以处理数百种常见的对象类型: 显示图片文件、 解析并格式化 HTML 文件、 通过计算机声卡播放音频文件, 或者运行外部插件软件来处理特殊格式的数据
- MIME的格式:主类型/次类型 例如:image/png image/jpeg text/html text/plain
-
URI: 统一资源标识符(Uniform Resource Identifier)URI 就像因特网上的邮政地址一样, 在世界范围内唯一标识并定位信息资源。URI 有两种形式, 分别称为 URL 和 URN。
URL:统一资源定位符.URL 描述了一台特定服务器上某资源的特定位置。 它们可以明确说明如何从一个精确、 固定的位置获取资源.
URL说明了协议,服务器和本地资源。几乎所有的 URI 都是 URL
URN:统一资源名。URN 是作为特定内容的唯一名称使用的, 与目前的资源所在地无关。 使用这些与位置无关的 URN, 就可以将资源四处搬移。 通过 URN, 还可以用同一个名字通过多种网络访问协议来访问资源。URN 仍然处于试验阶段, 还未大范围使用。 为了更有效地工作, URN 需要一个支撑架构来解析资源的位置。 而此类架构的缺乏也延缓了其被采用的进度。 但 URN确实为未来发展作出了一些令人兴奋的承诺。
事务
- 一个 HTTP 事务由一条(从客户端发往服务器的) 请求命令和一个(从服务器发回客户端的) 响应结果组成。 这种通信是通过名为 HTTP 报文(HTTP message)的格式化数据块进行的
- 方法:每个http报文中都包含一个方法,常见的方法有:
ps:和后台交流的时候经常会说,url的请求类型是啥啊?
-
状态码:每条 HTTP 响应报文返回时都会携带一个状态码。 状态码是一个三位数字的代码,
告知客户端请求是否成功, 或者是否需要采取其他动作。
ps:看到过一道面试题:状态码302代表啥
- 一个web页面不是单个资源,而是多个资源的合集
报文
从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message)。 从服务器发往客户端的报文称为响应报文(response message), 此外没有其他类型的HTTP 报文。
-
报文由起始行,首部字段,主体三部分组成。
连接
报文是通过传输控制协议(Transmission Control Protocol, TCP) 连接从一个地方搬移到另一个地方去的。
TCP/IP协议:HTTP 是个应用层协议。 HTTP 无需操心网络通信的具体细节; 它把联网的细节都交给了通用、 可靠的因特网传输协议 TCP/IP。因特网自身就是基于 TCP/IP 的, TCP/IP 是全世界的计算机和网络设备常用的层次化分组交换网络协议集。 TCP/IP 隐藏了各种网络和硬件的特点及弱点, 使各种类型的计算机和网络都能够进行可靠地通信。
-
http基于tcp,tcp基于ip
连接、 IP地址及端口号
在 HTTP 客户端向服务器发送报文之前, 需要用网际协议(Internet Protocol, IP)地址和端口号在客户端和服务器之间建立一条 TCP/IP 连接。在 TCP 中, 你需要知道服务器的 IP 地址, 以及与服务器上运行的特定软件相关的TCP 端口号。
通过一种称为域名服务(Domain Name Service, DNS) 的机制方便地将主机名转换为 IP
地址(www.xswell.com=>192.142.6.0)URL可以不带端口号,采用默认端口号80连接
步骤如下:
(a) 浏览器从 URL 中解析出服务器的主机名;
(b) 浏览器将服务器的主机名转换成服务器的 IP 地址;
(c) 浏览器将端口号(如果有的话) 从 URL 中解析出来;
(d) 浏览器建立一条与 Web 服务器的 TCP 连接;
(e) 浏览器向服务器发送一条 HTTP 请求报文;
(f) 服务器向浏览器回送一条 HTTP 响应报文;
(g) 关闭连接, 浏览器显示文档。
-
Telnet:Telnet 程序可以将键盘连接到某个目标 TCP 端口, 并将此 TCP 端口的输出回送到
显示屏上。 Telnet 常用于远程终端会话, 但它几乎可以连接所有的 TCP 服务器, 包
括 HTTP 服务器。
协议版本
- 0.9 设计缺陷
- 1.0 第一个得到广泛使用的 HTTP 版本
- 1.0+ 很多流行的 Web 客户端和服务器都在飞快地向 HTTP中添加各种特性, 以满足快速扩张且在商业上十分成功的万维网的需要。 其中很多特性, 包括持久的 keep-alive 连接、 虚拟主机支持, 以及代理连接支持都被加入到 HTTP 之中, 并成为非官方的事实标准。 这种非正式的 HTTP 扩展版本通常称为 HTTP/1.0+。
- 1.1 校正 HTTP 设计中的结构性缺陷, 明确语义, 引入重要的性能优化措施, 并删除一些不好的特性。 HTTP/1.1 是当前使用的 HTTP 版本。
- 2.0ng 不研究了,也不打算推广
web的结构组件
- 代理:代理位于客户端和服务器之间, 接收所有客户端的 HTTP 请求, 并将这些请求转发给服务器(可能会对请求进行修改之后转发)。 对用户来说, 这些应用程序就是一个代理, 代表用户访问服务器.
出于安全考虑, 通常会将代理作为转发所有 Web 流量的可信任中间节点使用。 代理还可以对请求和响应进行过滤。 比如, 在企业中对下载的应用程序进行病毒检测,或者对小学生屏蔽一些成人才能看的内容。
缓存:Web 缓存(Web cache) 或代理缓存(proxy cache) 是一种特殊的 HTTP 代理服务
器, 可以将经过代理传送的常用文档复制保存起来。 下一个请求同一文档的客户端
就可以享受缓存的私有副本所提供的服务了
- 网关:是一种特殊的服务器, 作为其他服务器的中间实体使用。 通常用于将 HTTP 流量转换成其他的协议。 网关接受请求时就好像自己是资源的源端服务器一样。 客户端可能并不知道自己正在与一个网关进行通信。
- 隧道:是建立起来之后, 就会在两条连接之间对原始数据进行盲转发的HTTP 应用程序。 HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数据, 转发时不会窥探数据。
-
Agent 代理(或者简称为 Agent 代理) 是代表用户发起 HTTP 请求的客户端程序。目前我们知道的agent代理就是web浏览器,其实搜索引擎也是agent代理。