《图解http》速读笔记
本文为《图解http》阅读笔记,部分图片来源于《图解HTTP》一书。
1.共享知识的设想。
CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee) 博士提出了一种能让远隔两地的研究者们共享知识的设想。
最初设想的基本理念是:借助多文档之间相互关联形成的超文本 (HyperText),连成可相互参阅的 WWW(World Wide Web,万维 网)。
2.为知识共享而规划web。
1989年3月,互联网还只属于少数人。在这一互联网的黎明期,HTTP 诞生了。
3.WWW (World Wide Web,万维 网)这一名称,是 Web 浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web。
4.三 项 WWW(万维网) 构建技术。
①HTML:把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标
记语言的 HTML(HyperText Markup Language,超文本标记语言)
②HTTP:HTTP(HyperText Transfer Protocol,超文本传输协议 )协议。HTTP通常的译法是“超文本传输协议”,更严谨的译法是“超文本转移协议”。协议是指规则的约定。
③URL:指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)
5.web成长时代。
①第一台 Web 服务器和 Web 浏览器。1990 年 11 月,CERN 成功研发了世界上第一台 Web 服务器和 Web 浏览器。
②HTML1.0。1990 年,大家针对 HTML1.0 草案进行了讨论,因 HTML1.0 中存在多处模糊不清的部分,草案被直接废弃了。HTML1.0并不存在。HTML的第一个官方版本就是由IETF(互联网工程任务组)推出的HTML2.0。在1993年6月作为互联网工程工作小组(IETF)工作草案发布。img标签出现在HTML 2.0。
③第一场浏览器大战,Netscape Navigator 1.0和Internet Explorer 1.0。1994 年 的 12 月,网景通信公司发布了 Netscape Navigator 1.0,1995 年微软公司发布 Internet Explorer 1.0 和 2.0。
④HTML4.01。1999年HTML4.01诞生。
⑤第二场浏览器大战。2004 年,Mozilla 基金会发布了 Firefox 浏览器,第二次浏览器大战随即爆发。
⑥蓬勃发展的浏览器时代。Internet Explorer 浏览器的版本从 6 升到 7 前后花费了 5 年时间。之后接连不断地发布了 8、9、10 版本。另外,Chrome、Opera、Safari 等浏览器也纷纷抢占市场份额。
6.HTTP的广发应用。当年 HTTP 协议的出现主要是为了解决文本传输的难题。由于协议本身非常简单,于是在此基础上设想了很多应用方法并投入了实际使用。现在 HTTP 协议已经超出了 Web 这个框架的局限,被运用到了各种场景里。
7.有说法认为,TCP/IP 是互联网相关的各类协议族的总称 。
8.TCP/IP 的分层。应用层、传输层、网络层和数据链路层。利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
9.与 HTTP 关系密切的协议 : IP、TCP 和 DNS 。
①IP:负责传输的 IP 协议。按层次分,IP(Internet Protocol)网际协议位于网络层。几乎所有使用网络的系统都会用到 IP 协议。可能有人会把“IP”和“IP 地址”搞混,“IP”其实是一种协议的名称。
②TCP:按层次分,TCP 位于传输层,提供可靠的字节流服务。
③DNS:DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。
10.URI 和 URL。
URL:URL是 Uniform Resource Locator 的缩写,统一资源定位符,正是在浏览器地址栏输入的地址。
URI:URI 是 Uniform Resource Identifier 的缩写,统一资源标识符。URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。 采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp、 mailto(html的a标签邮件发送常用的)、telnet、file 等。URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联 网上所处的位置)。可见 URL是 URI 的子集。
11.HTTP返回状态码。
①状态码的职责:状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
②具体状态码的表示意思:
204 No Content,表示请求处理成功,但没有资源可返回。该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。
206 Partial Content ,该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
301 Moved Permanently ,永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。
302 Found ,临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303 See Other ,该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
304 Not Modified ,该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。(资源已找到,但不符合请求所附带的添加。好像是说已经找到钱包,但你的请求附带了一个钱包里应有10k金额的条件,所以不好意思,无法把钱包返回给你。)
307 Temporary Redirect ,临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。
400 Bad Request ,该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
401 Unauthorized ,该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用户认证失败。
403 Forbidden ,该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。 未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。
404 Not Found,该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error,该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
503 Service Unavailable,该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfter 首部字段再返回给客户端。
12.http之前的协议。在 HTTP 普及之前,也就是从互联网的诞生期至今,曾出现过各式各样的协议。在 HTTP 规范确立之际,制定者们参考了那些协议的功能。也有某些协议现在已经彻底退出了人们的视线。
①FTP(File Transfer Protocol) ,传输文件时使用的协议。该协议历史久远,可追溯到 1973 年前后,比 TCP/IP 协议族的出现还要早。虽然它在 1995 年被 HTTP 的流量(Traffic)超越,但时至今日,仍被广泛沿用。
②NNTP(Network News Transfer Protocol) ,用于 NetNews 电子会议室内传送消息的协议。在 1986 年前后出现,属于比较古老的一类协议。现在,利用 Web 交换信息已成主流,所以该协议已经不怎么使用了。
③Archie,搜索 anonymous FTP 公开的文件信息的协议。1990 年前后出现,现在已经不常使用。
④WAIS(Wide Area Information Servers),以关键词检索多个数据库使用的协议。1991 年前后出现。由于现在已经被 HTTP 协议替代,也已经不怎么使用了。
⑤Gopher 查找与互联网连接的计算机内信息的协议。1991 年前后出现,由于现在已经被 HTTP 协议替代,也已经不怎么使用了。
13.HTTP 请求报文,在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等部分构成。
14.HTTP 响应报文,在响应中,HTTP 报文由 HTTP 版本、状态码(数字和原因短语)、 HTTP 首部字段 3 部分构成。
15.HTTP/1.1 规范定义了如下 47 种首部字段。
①通用首部字段。
②请求首部字段。
③响应首部字段。
④实体首部字段。
⑤非HTTP/1.1 首部字段。在 HTTP 协议通信交互中使用到的首部字段,不限于 RFC2616 中定义的 47 种首部字段。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用频率也很高。 这些非正式的首部字段统一归纳在 RFC4229 HTTP Header Field Registrations 中。
16.Cache-Control,通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制。指令的参数是可选的,多个指令之间通过“,”分隔。首部字段 Cache- Control 的指令可用于请求及响应时。
①缓存请求指令。
②缓存响应指令。
17.指定不接受缓存。使用Cache-Control: no-cache 和Pragma: no-cache指令实现不接受缓存。
Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅作为与 HTTP/1.0 的向后兼容而定义。所有的中间服务器如果都能以 HTTP/1.1 为基准,那直接采用 Cache- Control: no-cache 指定缓存的处理方式是最为理想的。但要整体掌握全部中间服务器使用的 HTTP 协议版本却是不现实的。因此,发送的请求会同时含有Cache-Control: no-cache 和Pragma: no-cache两个首部字段。
18.Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。