目录
HTTP协议发展历史
HTTP 是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传输层协议,保证了数据传输的可靠性。
HTTP/0.9
只支持GET方法,没有HEADER等描述数据的信息。
服务器发送完毕,就关闭TCP连接。
HTTP/1.0
增加了很多命令
增加了status code和header。
多字符集支持、多部分发送、权限、缓存等。
HTTP/1.1
持久连接
增加了pipeline
增加了host和其它一些命令
HTTP2
所有数据以二进制传输
同一个链接里面发生多个请求不再需要按照顺序来
头信息压缩以及推送等提高效率的功能
TCP/IP协议族
通常使用的网络是在TCP/IP协议族的基础上运作的,而 HTTP 属于它内部的一个子集。
协议:不同的硬件、操作系统之间通信所需要的规则。
TCP/IP:把与互联网相关联的协议集合起来。
经典的五层模型
应用层(HTTP、FTP)、传输层(TCP、UDP)、网络层(IP)、数据链路层、物理层
1.应用层为应用软件提供了很多服务。
构建于TCP协议之上。屏蔽网络传输相关细节。
2.传输层向用户提供可靠的端到端服务。
传输层向高层屏蔽了下层数据通信的细节。
低三层
3.物理层主要作用是定义物理设备如何传输数据。电脑硬件、网卡端口、网线、光缆等等。
4.数据链路层在通信的实体间建立数据链路层连接。
5.网络层为数据在结点之间传输创建逻辑链路。
与 HTTP 关系密切的协议 : IP、TCP 和 DNS
-
负责传输的 IP 协议
IP位于网络层,是一种协议的名称,与IP地址不同。
IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。
IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。 -
确保可靠性的 TCP 协议
按层次分,TCP 位于传输层,提供可靠的字节流服务。
字节流服务是指为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。
TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。 -
负责域名解析的 DNS 服务
DNS服务是和 HTTP 协议一样位于应用层的协议。
用户通常使用主机名或域名来访问对方的计算机,而不像计算机那样直接通过 IP地址访问。
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。即提供域名到 IP 地址之间的解析服务。
TCP三次握手
用 TCP 协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
握手过程中使用了 TCP 的标志 —— SYN(synchronize) 和ACK(acknowledgement)。
三次握手过程:
发送端首先发送一个带 SYN 标志的数据包给对方。
接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。
最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。
三次握手、持久连接化、管线化、四次挥手
Cookie技术:
HTTP 协议自身不对请求和响应之间的通信状态进行保存。
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态
URI、URL和URN
URI:统一资源标识符
URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源
包括URL和URN
URL:统一资源定位符
描述一台特定服务器上某些资源的特定位置
几乎所有的URI都是URL
URN:统一资源名
通过URN可以用同一个名字通过多种网络访问协议来访问资源
还处于试验阶段,没有成熟的方案
方法、状态码
一些常见的HTTP方法:
GET: 向服务器访问资源
PUT: 将来自客户端的数据存储到一个命名的服务器资源中去,例如客户端吧文件传给服务器
DBLETE: 从服务器中删除命名资源
POST : 将客户端数据发送到一个服务器网关应用程序,例如客户端把某条信息告诉服务器
HEAD: 仅发送命名资源响应中的HTTP首部
状态码:
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
一些常见的状态码 | |
---|---|
200 OK | 文档正确返回 |
204 No Content | 请求处理成功,但没有资源返回 |
206 Partial Content | 对资源某一部分的请求 |
302 Redirect | 到其他地方去获取资源 |
301 Moved Permanently | 永久性重定向,请求的资源被分配了新的 URI |
302 Found | 临时性重定向 |
303 See Other | 应使用 GET 方法定向获取请求的资源 |
403 Forbidden | 不允许访问 |
404 Not Found | 服务器上无法找到这个资源 |
503 Service Unavailable | 服务器暂时处于超负载或正在进行停机维护 |
HTTP报文
HTTP报文是由一行一行的简单字符串组成的.HTTP报文都是纯文本,不是二进制代码,可以很方便地对其进行读写。
HTTP报文包含报文首部、报文主体。请求报文和响应报文的首部内容一般由请求行、状态行、首部字段、其他信息组成。
请求报文:从Web客户端发往Web服务器的HTTP报文。
响应报文:从服务器发往客户端的报文。
与HTTP协作的Web服务器
域名、IP地址:
用单台虚拟主机可以实现多个域名,域名通过 DNS 服务映射到 IP 地址之后访问目标网站。
也就是说,当请求发送到服务器时,已经是以 IP 地址形式访问。
通信数据转发程序 :代理、网关、隧 道
代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请 求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客 户端可能都不会察觉,自己的通信目标是一个网关。
隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
参考资料:《图解HTTP》