A little bit of HTTP sth sth.

关于一些 HTTP 的初识记录

Posted by mslinzz on 2017-07-31

前言

作为前端开发者, 甚至是开发者, 都有必要了解一些 HTTP 的知识, 因为我们时刻都用到 WEB 来访问网站, 为什么我们在浏览器的地址栏输入一串 URL 回车就会显示预期的主体内容呢? 因为这其中 WEB 使用 HTTP(HyperText Transfer Protocol, 超文本传输协议) 的协议作为规范, 完成客户端(Client)到服务器端(Serve)等一系列运作的流程. 而协议是指规则的约定. 就是说, WEB 是建立在 HTTP 协议上通信的.

HTTP 的诞生历史

1989 年 03 月, 互联网还只是属于少数人. 在这一互联网的黎明期, HTTP 诞生了. CERN(欧洲核子研究组织)的 蒂姆 · 伯纳斯 - 李 (Tim Berners-Lee)博士提出一种能让远隔两地的研究者们共享知识的设想. 实现知识共享而规划 WEB.

最初设想的基本理念是: 借助多文档之间相互关联形成的超文本(Hyper Text), 连成可相互参阅的 WWW(World Wide Web, 万维网). 现在已提出3项 WWW 构建技术, 分别是: 把 SGML(Standard Generalized Markup Language, 标准通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language, 超文本标记语言); 作为文档传递协议的 HTTP; 指定文档所在地址的 URL(Uniform Resource Locator, 统一资源定位符).

WWW 是一名称, 是 Web 浏览器当年用来浏览超文本的客户端应用程序的名称. 现在用来表示这一系列的集合, 也简称 WEB.

1990 年 11 月, CERN 成功研发了第一台 Web 服务器和 Web 浏览器. 这一期间, 大家针对 HTTP1.0 的草案进行讨论, 因存在多处模糊不清的部分, 最终直接废弃了.

1992 年 09 月, 日本的第一个网站的主页上线了.

1993 年 01 月, 现代浏览器的祖先 NCSA(National Center for Supercomputer Applications, 美国国家超级计算机应用中心) 研发的 Mosaic 问世了. 它以 in-line(内联)等形式显示 HTMl 的图像, 在图像方面出色的表现是它迅速在世界范围内流行开来.

1993 年 秋天, Mosaic 的 Windows 版和 Macintosh 版面试. 使用 CGI 技术的 NCSA Web 服务器, NCSA HTTPPd 1.0 也差不多是这个时期出现的.

1994 年 12 月, 网景通信公司发布了 Netscape Navigator 1.0

1995 年, 微软公司发布 Internet Explorer 1.0 和 2.0

从 1994 - 1995 年左右起, 网景公司与微软公司爆发了浏览器大战, 在这场浏览器供应商竞争中, 他们不仅对当时发展中的各种 Web 标准化视而不见, 还屡次出现新增功能没有对应的说明文档的情况.

2000 年前后, 随着网景公司衰落而暂告一段落.

2004 年, Mozilla 基金会发布了 Firefox 浏览器, 第二次浏览器大战随即爆发, 随后也出现了Chrome、Opera、Safari等等.

到此为止, HTTP 于 1990 年问世之后, 并没有作为正式的标准被建立. 现在的 HTTP 其实含有 HTTP 1.0 之前的版本的意思, 因此被称为 HTTP/0.9

HTTP 正式作为标准被公布是在 1996 年 05 月, 版本命名为 HTTP/1.0, 并记载于RFC1945

1997 年 01 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本.

2014 年 11 月, 负责互联网标准的 IETF(Internet Engineering Task Force, 互联网工程任务组) 创立 httpbis(Hypertext Transfer Protocol Bis)工作组, 推进了下一代 HTTP 标准, HTTP/2.0.

与 HTTP 关系密切的协议: IP 、TCP、 DNS

IP (Internet Protocol) 国际协议位于网络层. 负责传输的 IP 的协议, 不要把 ‘IP地址’ 与 ‘IP’ 搞混, ‘IP’ 是一种协议的名称.

TCP 位于传输层, 提供可靠的字节流服务. 能够确认数据最终是否送达到对方.

DNS (Domain Name System) 服务和HTTP协议一样位于应用层. 它提供域名到 IP 地址之间的解析服务.

URI 和 URL

URI (Uniform Resource Identifier, 统一资源标识符)

URL (Uniform Resource Locator, 统一资源定位符)

看全称可知, URI 用字符串标识某一互联网资源, 而 URL 表示资源的地址(互联网所处的位置). URL 是 URI 的子集.

例举几项 “RFC3986: 统一资源标识符(URI)通用语法”:

1
2
3
4
5
6
7
8
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:someone@gmail.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specificationo:docbook:dtd:xml:4.1.2

来个图解:

uri

HTTP 状态码

HTTP 状态码负责标示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作.

类别 原因短语
1XX Informational (信息性状态码) 接受的请求正在处理
2XX Success (成功状态码) 请求正常处理完毕
3XX Redirection (重定向状态码) 需要进行附加操作以完成请求
4XX Client Error (客户端错误状态码) 服务器无法处理请求
5XX Server Error (服务器错误状态码) 服务器处理请求出错

HTTP 状态码种类多, 但是其中经常使用的是以下14种:

200 OK, 正常处理成功
204 No Content, 请求处理成功, 但没有资源可返回. 一般用作客户端不需要发送新内容情况下使用.
206 Partial Content, 客户端进行了范围请求, 响应报文中包含 Content-Range 指定范围的实体内容.

301 Moved Permanently, 永久性重定向.
302 Found, 临时性重定向. 另外标准禁止 POST 变换成 GET, 但大家并不遵守.
303 See Other, 应采用 GET 方式定向获取请求的资源.
304 Not Modified, 不包含任何响应的主体部分. 因客户端发送附带条件的请求时, 服务器允许请求访问资源, 但未满足条件. 304 和重定向没有关系.
307 Temporary Redirect, 临时重定向. 与 302 相同含义, 但遵照浏览器标准, 不会从 POST 变成 GET, 每个浏览器有可能出现不同的情况.

400 Bad Request, 表示请求报文中存在语法错误.
401 Unauthorized, 表示发送的请求需要有通过 HTTP 认证(BASIC认证、DIGEST认证)的认证信息.
403 Forbidden, 表明对请求资源的访问被服务器拒绝了. 未获得文件系统的访问授权.
404 Not Found, 表明服务器上无法找到请求的资源.

500 Internal Server Error, 表明服务器端在执行请求时发生了错误或某些临时的故障.
503 Service Unavailable, 表明服务器暂时处理超负载或正在进行停机维护, 现在无法处理请求. 可预知的情况下, 服务器端最好写入 Retry-After 首部字段在返回给客户端.

注明

以上摘录至 <<图解HTTP>> 作为个人阅读后的复习笔记.