返回顶部

http权威指南书籍每一章的概念总结、提炼笔记--内容持续更新

来源:建枫 发布时间:2016-05-15

前话

这篇文章对《http权威指南一书》里面每一章的内容及相关概念作提炼性记录!不过提醒大家,这篇文章的内容并不能代表原书籍,因为很多概念是“截断”原书中的内容,所以难免有“断章取义”之嫌,我的本意,帮助已经看过原书的人回忆一些概念而已!还有原书中内容实在太宽泛,并不仅仅只限于前端领域,而我可能只做前端的部分!所以如果你真的想学习这本书籍,还是要请你查看原书籍!由于书中内容较多,并不决定一次性写完本文,所以文章不定期更新!

第一章:http概述

http--英特网的多媒体信使

http是一种数据传输协议,用来沟通客户端和服务端。它是稳定的,所以可以使得数据在传输过程不变得混乱!http位于应用层!

Web客户端和服务器

客户端--内容的请求者,服务器--内容的提供者,因为使用http协议,所以分别被称为http客户端和http服务器!

资源

服务器所能提供的数据类型统称概念,包括各种你能想象的文件,并不仅仅限于静态文件,也包括动态文件,比如动态产生内容的程序等!

媒体类型--MIME

是一种数据格式标签,揭示数据类型,其表现为一个文本标记:一个主要的对象类型和一个次要的对象类型,中间用一个斜杠“/”来隔离,如“text/html”,"image/jpeg"等!其实MIME的作用就是内容的“提供者”给内容的“接收者”提示内容的数据类型,然后“接收者”来决定调用什么来处理数据!

URI

URI--统一资源标识符,包括两个部分:URL--统一资源定位符(唯一的,也就是我们平时在浏览器输入的那个完整资源地址,如:http://www.baidu.com/xx//xx.html)。URN--统一资源名(特定资源的名字)!

事务

一个事务包括一条客户端发起的请求命令和服务端相应结果组成!

方法

表示客户端向服务端请求数据所使用的方法,也就是我们平时在代码中使用的诸如“get、post、put”等!

状态码

响应报文中都会携带一个三位数字的状态码,用来告知客户端请求是否成功!常见状态码200代表成功、302重定向、404文件未找到等!

web页面中可以包括多个对象

这个概念揭示我们平时看到的网页,并不是只有一个资源,而是多个资源(可以不同服务器)的集合,所以客户端可能要发起多个事务来得到这些资源!

报文

报文分文请求报文和响应报文!此外报文包括三个部分:起始行、首部、主体!起始行就是报文第一行,用来告知需要干什么,首部用“:”隔开键值数据,然后首部空一行就是主体!

连接

TCP/IP

暂作http下一层的协议理解就好!

IP地址、端口号

IP地址:域名的数字化地址,端口号:可以理解成到同一个目的地选择的入口,可以认为默认为“80”。

“三次握手”雏形

原书并没有此,是我自己理解的,1、浏览器解析域名,建立连接。2、客户端发送请求、服务端响应请求。3、关闭连接。这里的每个都是客户端和服务器来回接触实现的!

web的结构组件

代理

代理位于客户端和服务器之间,用来接受所有客户端http请求,并转发到服务器(可能会做修改)!代理可以做过滤器使用,如检测病毒、防止未成年人浏览成人网站等!

缓存

缓存是一种特殊的http代理服务器,用来缓存文件,提高响应速度等!

网关

是一种服务器,用来实现协议的转换,比如一个http/ftp网关,客户端发起一个http报文,然后通过网关,网关向ftp协议的服务器发起ftp报文,最后得到的结果再封装成http报文给客户端,这一转换,客户端可能并不知道!

隧道

用来对数据进行盲转发的程序!

Agent代理

用来代替用户向服务端发送请求的客户端程序,通常可以想到的就是web浏览器,但是Agent代理还有很多其他的类型,我们就作帮用户发起请求的程序理解,包括自动的!

第二章:URL与资源

浏览因特网资源

url是浏览器寻找信息时所需的资源位置!URI是由URL和URN两部分组成!

URL的语法

               语法如下:
                 <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
               最重要的三个部分就是方案、主机、路劲!
               方案:访问服务器获取资源时使用的协议
               用户名:某些方案获取资源时需要的用户名
               密码:用户名后面的密码
               主机:资源宿主的域名或ip地址
               端口:服务器正在监听的端口:http默认是80
               路径:资源在服务器上的目录路径
               参数:附加的一些参数,用分号与其它部分分开
               查询:?开头,name1=value1&name2=value2……的结构
               片段:表示网页页面中的一个片段
            

方案--使用了什么协议

方案实际上是规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么协议。

主机和端口

主机标识了因特网上能够访问资源的宿主机器,端口标识了服务器正在监听的网络端口。

用户名和密码

记住有些方案需要用户名和密码就行了!

路径

其实就是告诉资源在服务器的那个地方。

参数

有些资源需要请求者提供额外的参数,否则服务器是不会理睬的!

查询字符串

有些操作,需要输入用用户加入的字符才行。

片段

记住是网页的一部分就是,常用情况就是,a标签连接到某网页的中间的某个部分!比如/index.html#place_1。

URL快捷方式

相对URL

url有绝对和相对之分,绝对url提供完整的url连接,而相对url提供部分url连接,它残缺的部分程序自己从基础url里面解析出来。

基础URL

大部分情况下就是主机等!可以标签<base>显示给出,也可以自动判断!

自动扩展URL

大概指的就是,有时候我们在浏览器中只输入了一个url的一部分,有浏览器自动把它补充完成的那种功能,比如有时候我们可能只是输入了taobao,而浏览器把它补充为http://www.taobao.com/,主要分为主机名扩展和历史扩展。

各种令人头疼的字符

简单来说,url需要规范,所以它不能包含一些字符!需要通过转意等什么的操作!

方案的世界

常见协议:http https mailto ftp rtsp,rtspu file news telnet。

未来展望

说明了url机制的一些缺陷,比如资源的实际物理地址变了,那么原先的url就无用了,这样会很不灵活,因为又得重新来一个新的url,而urn就不一样了,未来urn可以解决这样的问题,但是urn取代url还有很长一段时间需要走!

HTTP报文

报文流

http报文是在http应用程序之间发送的数据块。http流形象的必须要报文的在服务器和浏览器传输的一种“流”的状态。

报文流入源端服务器

http使用术语流入和流出来描述事务处理的方向。

报文向下游流动

形象说明报文向河水一样流动,发送端在上游,接收端在下游!

报文的组成部分

包括起始行、包含属性的首部及可选的主体。

报文的语法

报文分为请求报文和响应报文,请求报文会向web服务器请求一个动作,而响应报文会将请求的结果返回给客户端。报文中分别有以下一些概念

               方法:请求数据的方法,比如get、post等
               请求url:资源的地址
               版本:协议+版本
               状态码:服务器返回的数据情况状态表示,如200、304等
               原因短语:状态码的辅助解释,只对人有用,对机器无用
               首部:就是一些键值对,描述请求双方的一些参数
               主体:可以理解为就是实际上的返回我的数据
            

起始行

报文都以起始行开始,请求报文描述要干什么,响应报文描述干了什么。

首部

http首部字段向请求和响应报文中添加了一些附加信息。

               首部有如下分类
                通用首部
                请求首部
                响应首部
                实体首部
                扩展首部
            

实体的主体部分

实体的主体是http报文的负荷,就是http要传输的内容。

方法

客户端请求数据的方法

安全方法

使用这些方法的请求不会产生什么动作。

扩展方法

http首先是扩展的,这样主要保证向前兼容的,所谓扩展方法就是在http1.1中未定义的方法!

状态码

状态码为客户端提供了一种理解事务处理结果的便捷方式,分为五大类。

100~199--信息性状态码

这些信息码主要提供一些附加信息,且在http1.1之后才引入的,所以功能受到限制。

200~299--成功状态码

表示客户端发起的请求都是成功的。

300~399--重定向状态码

说明要请求的资源路径发生了改变。

400~499--客户端错误状态码

客户端出现问题引起的请求错误!

400~499--服务器错误状态码

服务器端出现问题引起的请求错误!

后面内容持续更新………………………………