# 第一章 HTTP协议及网络基础
>作者:肖鹏 时间:2018-04-06
> HTTP协议是什么?
> 首先我们要知道http是什么?协议是什么?
> 在我理解就是,协议是两方及其两方以上共同约定的一种规则,所以这里协议就是指网络中各方都遵守的一种协议,只有规则相同时,相互才能理解对方所说的话
> HTTP是HyperText Transfer Protocol 的缩写,HyperText:超文本,Transfer:传输,Protocol:协议,合起来就是超文本传输协议,这里超文本指的是超级文本,用超链接的方式将文本组合起来的网状文本
> 原书内容:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
>
> --**[《百度百科》](https://baike.baidu.com/item/http/243074)**
## 1.1 HTTP信息
> HTTP:超文本传输协议(原名为:超文本转移协议)
现在使用的是HTTP/1.1版本,并记载于[RFC2616](https://tools.ietf.org/html/rfc2616)
> HTTP协议用于客户端和服务器端之间的通信
>
> 通过请求和响应的交换进行通信
>
> HTTP是不保存状态的协议
## 1.2 网络基础TCP/IP
> TCP/IP这里不详细讲,详细内容查看TCP/IP笔记
### 1.2.1 TCP/IP协议族
> 不同的硬件、操作系统之间的通信,所有这一切都需要一种规则。这种规则就是协议,也就是说协议就是网络世界的规则
TCP/IP:
- 一种为指TCP和IP两种协议
- 另一种说法是在IP协议的通信过程中,所使用的协议族的统称
### 1.2.2 TCP/IP分层管理
* 应用层
* 传输层
* 网络层
* 数据链路层
1. 应用层:决定了向用户提供应用服务时通信的活动。比如:FTP、DNS和HTTP等等
2. 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。比如TCP(传输控制协议:Transmission Control Protocol)和UDP(用户数据包协议:User Data Protocol)
3. 网络层:处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,也就是说它是选择传输路线的
4. 链路层:用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡)等等
> 把数据信息包装起来的方法叫做封装
## 1.3 与HTTP关系密切的协议
### 1.3.1 IP协议
> IP:负责传输的协议
IP协议位于网络层(Internet Proctor)几乎所有的网络系统都会使用到IP协议,IP地址与IP协议是不同的
传输过程中需要两个重要条件,一个是IP地址,一个为MAC地址
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址;IP地址和MAC地址可以相互匹配,IP地址可以改变,但MAC地址一半保持不变
IP间的通信依赖于MAC地址。在网络上,一般传输时,双方不处于同一局域网内,所以这时我们需要经过多台计算机转发才可以达到对方,而在中转时会利用下一站中转设备的MAC地址来搜索下一个中转目标,这时,会采用ARP协议(Address Resolution Protocol),ARP是一个地址解析协议,根据通信方的IP地址就可以反查出对应的MAC地址
因为网络世界很大,我们无法全部掌握,所以在传输中不能准确的选择发送到目标,所以我们采用路由选择机制,这种机制和快递很像:比如从西安发往哈尔滨
1. 首先你将快递送到本区的集散点,才能确定是否可以发送至哈尔滨
2. 然后快递公司收取,送至下个目标点西安总公司,查看目标地点,发现是哈尔滨的
3. 然后发往下个目标点黑龙江省总公司,因为哈尔滨是省会,所以相当于发往哈尔滨的总公司
4. 继续查找下个目标地点,为哈尔滨某个区,发往此处,到达目标点
### 1.3.2 TCP协议
> 确保可靠性的协议
为了能够无误地将数据送达到目标,TCP协议采用了三次握手策略。用TCP协议把数据包发送出去后,TCP不会对传递后的情况置之不理,而是等待向对方确认是否成功发送。在此过程中使用了TCP的标志(flag)-SYN(synchronize)和ACK(acknowledgment)
**以下图例显示TCP的三次握手:**
| 发送端 | 数据 | 接收端 |
| --- | --- | -- |
| ==> | 标有SYN的数据包发送 | ==> |
| <== | 返回信息并且发送标有SYN/ACK数据包 | <== |
| ==> | 返回信息并发送标有ACK的数据包 | ==> |
### 1.3.3 DNS服务
> 和HTTP服务一样位于应用层,提供域名到IP地址之间的解析服务
你是否有过本地测试代码,因为localhost不好输入,不美观而头痛,在这里我写了一个关于修改IIS的host文件来改变域名的DNS解析,让其指向本地127.0.0.1 **[博客地址,点击访问](https://www.cnblogs.com/spirit-ling/p/8646895.html)**
## 1.4 URI和URL
> - URI:统一资源标识符
> - URL:统一资源定位符
### 1.4.1 统一资源**标识符**(URI)
> URI是Uniform Resource Identifier 的缩写。RFC2396分别对这3个单词进行了如下定义
- **Uniform(统一的,制服)**:规定统一的格式可方便的处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如:HTTP:或FTP:)也更容易
- **Resource(资源,财力)**:资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体
- **Identifier(标识符,认同者)**:表示可标识的对象。也称作标识符。
> **URL格式:**
>
> 例子:http://user:pass@www.example.com:80/dir/index.html?uid=1#hash2
- **http:// ->** :协议类型,除了http以外有ftp,mailto,news,tel,telnet,urn等等,这里只列出常见的,也可以使用data:或javascript:这类指定数据或脚本程序的方案名,必选项
- **user:pass ->** :登录信息(认证),指定用户名和密码作为从服务器端获取资源时必要的登录信息,现在不常用,可选项
- **www.example.com ->** :服务器地址,也可以使用IP地址,必选项
- **80 ->** :端口号,不输入时,默认端口号,可选项
- **dir/index.html ->** :带层次的文件路径,指定服务器上的文件路径来定位特指的资源
- **?uid=1 ->** :查询字符串,可选
- **#hash2 ->** :片段标识符,hash值,可做锚点,可做前段路由,可选
### 1.4.2 统一资源**定位符** (URL)
> 统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
> 它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准[RFC1738](https://tools.ietf.org/html/rfc1738)了。
> 作者:肖鹏 时间:2018-04-06
- 首语
- 第一章 HTTP协议及网络基础
- 第二章 协议返回状态码
- 第三章 HTTP通用首部字段
- 第一节 Cache-Control字段
- 第二节 Connection 字段
- 第三节 Date 字段
- 第四节 Pragma 字段
- 第五节 Trailer 字段
- 第六节 Transfer-Encoding 字段
- 第七节 Upgrade 字段
- 第八节 Via 字段
- 第九节 Warning 字段
- 第四章 HTTP请求首部字段
- 第一节 Accept 字段
- 第二节 Accept-Charset 字段
- 第三节 Accept-Encoding 字段
- 第四节 Accept-Language 字段
- 第五节 Authorization 字段
- 第六节 Expect 字段
- 第七节 From 字段
- 第八节 Host 字段
- 第九节 If-Match 字段
- 第十节 If-Modified-Since 字段
- 第十一节 If-None-Match 字段
- 第十二节 If-Range 字段
- 第十三节 If-Unmodified-Since 字段
- 第十四节 Max-Forwards 字段
- 第十五节 Proxy-Authorization 字段
- 第十六节 Range 字段
- 第十七节 Referer 字段
- 第十八节 TE 字段
- 第十九节 User-Agent 字段
- 第五章 HTTP响应首部字段
- 第一节 Accept-Ranges 字段
- 第二节 Age 字段
- 第三节 ETge 字段
- 第四节 Location 字段
- 第五节 Proxy-Authenticate 字段
- 第六节 Retry-After 字段
- 第七节 Server 字段
- 第八节 Vary 字段
- 第九节 WWW-Authenticate 字段
- 第六章 HTTP实体首部字段
- 第一节 Allow 字段
- 第二节 Content-Encoding字段
- 第三节 Content-Language 字段
- 第四节 Content-Length 字段
- 第五节 Content-Location 字段
- 第六节 Content-MD5 字段
- 第七节 Content-Range 字段
- 第八节 Content-Type 字段
- 第九节 Expires 字段
- 第十节 Last-Modified 字段
- 第七章 Cookie相关和其他的首部字段