目前,讲解网络协议的书实在太少,在我印象中仅有两本,一本是《HTTP权威指南》,另一本是《TCP/IP详解》,但是厚度令人生畏,内容艰涩难懂。
HTTP协议本身并不复杂,但是纯概念式的学习稍显单调,所以这里用通俗易懂的语言讲述一下。
网络基础TCP/IP
为了理解HTTP,我们要先了解一下TCP/IP协议族。
通常网络是在TCP/IP协议族的基础上运作的,HTTP属于它内部的一个子集。
TCP/IP协议族最重要的一点就是分层,按层次分为4层:应用层,传输层,网络层和数据链路层。
TCP/IP协议族与HTTP关系密切的协议:IP TCP DNS
1 网络层:负责传输的IP网际协议
2 传输层:提供可靠字节流服务的TCP协议
3 应用层:负责域名解析的DNS服务
1 网络层:负责传输的IP网际协议
IP网际协议的作用是把各种数据包传递给对方,保证确实传送到对方那里有两个重要条件:
1⃣️IP地址,可变换,指明节点被分配到的地址
2⃣️MAC地址,基本不变,指网卡所属的固定地址
2 传输层:提供可靠字节流服务的TCP协议
字节流服务是说,为了方便传输,把大块数据分割成以报文段为单位的数据包进行管理。
一言以蔽之,TCP协议为了更容易传送大数据,就把数据分割,而且TCP协议采用三次握手策略确认数据最终是否送达到对方。
3 应用层:负责域名解析的DNS服务
因为计算机擅长处理一长串数字,而人类的记忆习惯更适合有意义表达的字母,为了解决这个问题,DNS提供域名到IP地址之间的解析服务。
简单的HTTP协议
客户端发送请求:
GET /index.htm HTTP/1.1
Host:hackr.jp
这段请求内容意思是:请求访问某台HTTP服务器上的/index.htm页面资源
GET表示请求访问服务器的类型,称为方法
字符串 /index.htm指明请求访问的资源对象,也叫请求URI
HTTP/1.1是版本号
服务器发送响应:
HTTP/1.1 200 OK
Date:Tue,10 Jul 2017 06:60:15 GMT
Content-Length:text/html
<html>
...
返回结果的HTTP状态码
2XX:成功
3XX:重定向
4XX:客户端错误
5XX:服务器错误
HTTP状态码有60余种,但实际上经常使用的大概只有14种,下面来简单了解一下:
2XX:成功
200 OK 从客户端发来的请求在服务器端被正常处理了
204 No Content 请求成功处理,但返回的响应报文不含实体的主体部分
206 Partial Content 范围请求
3XX:重定向
301 Moved Permanently 永久性重定向,表示请求的资源已经被分配了新的URI
302 Found 临时性重定向
303 See Other 表示请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
304 Not Modified 服务器端资源未改变
307 Temporary Redirect 临时重定向,和302含义相同
4XX:客户端错误
400 Bad Request 请求报文中存在语法错误
401 Unauthorized 需要有认证信息
403 Forbidden 服务器拒绝访问
404 Not Found 服务器上没有请求的资源
5XX:服务器错误
500 Internal Server Error 服务器端内部资源出故障
503 Service Unavailable 服务器超负载或停机维护中
网友评论