第五章以HTTP协议为应用层协议的代表进行阐述,目的不在于展现HTTP的细节,而是了解应用层协议在做什么,应用层的职责主要是什么。第六章是对前面几章的一个总结,讨论网络协议每个层次的划分和职责,了解计算机网络的总体脉络。
HTTP协议
协议介绍
HTTP (Hypertext Transfer Protocol) 即超文本传送协议。定义了浏览器于万维网(WWW)服务器交互的协议,目前最广泛使用的是RFC 2616定义的HTTP 1.1版本。HTTP协议基于TCP协议基础之上,实现可靠性传输。HTTPS协议出于安全性考虑,基于SSL协议栈之上,最终也是基于TCP。

HTTP特性
HTTP的工作方式是由客户端发起连接,向服务器进行请求,服务端进行回应,而不能由服务的主动向客户端进行发送消息。HTTP有如下几个特性。
1)无状态
也就是说本次的请求和上一次请求无关,都是独立进行的。
2)简单快速
客户端可以指定一个URL路径使用GET方法向服务器发起请求,由于协议简单,使得服务器可以快速进行响应。
3)协议可读性高
不像之前介绍的TCP,IP等协议都是基于二进制协议,HTTP具备更高可读性。
HTTP的头域
HTTP头域是由三部分组成,域名加上冒号(":")加上域值所构成。HTTP的头域分为以下几类。
1) Transport
Connect头域
Host头域
2) Miscellaneous
Referer头域
Server头域
3) Clinet
Accept头域
Accept-Encoding头域
Accept-Language头域
User-Agent头域
4) Cache
If-Modifyed-since头域
If-None-Match头域
Pragma头域
Cache-Control头域
Date头域
Expires头域
Vary头域
5)Entity
Content-Length头域
Content-Type头域
Last-Modified头域
6)Location
Location头域
HTTP请求方法
HTTP请求需要携带请求方法,主要方法如下。
1)OPTIONS
2)HEAD
3)GET
4)POST
5)PUT
6)DELETE
7)CONNECT
8)PATCH
9)TRACE
HTTP回应状态码
HTTP回应需要携带状态码,HTTP 1.1定义了五类状态码,有三位数字组成,第一个数字为状态码类别。
1XX: 临时状态码,表示请求已被服务器接收。
2XX:成功,表示请求被服务器接收、解析、处理。
3XX: 重定向,表示要完成请求需要进一步处理。
4XX: 客户端错误,请求有语法错误,或者无法实现。
5XX: 服务端错误,服务器无法正确处理请求。
主要状态码解释如下:
状态码
|
状态码英文名称
|
中文描述
|
---|---|---|
100
|
Continue
|
继续。
客户端应继续其请求
|
101
|
Switching Protocols
|
切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
|
200
|
OK
|
请求成功。一般用于GET与POST请求
|
201
|
Created
|
已创建。成功请求并创建了新的资源
|
202
|
Accepted
|
已接受。已经接受请求,但未处理完成
|
203
|
Non-Authoritative Information
|
非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
|
204
|
No Content
|
无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
|
205
|
Reset Content
|
重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
|
206
|
Partial Content
|
部分内容。服务器成功处理了部分GET请求
|
300
|
Multiple Choices
|
多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
|
301
|
Moved Permanently
|
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
|
302
|
Found
|
临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
|
303
|
See Other
|
查看其它地址。与301类似。使用GET和POST请求查看
|
304
|
Not Modified
|
未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
|
305
|
Use Proxy
|
使用代理。所请求的资源必须通过代理访问
|
306
|
Unused
|
已经被废弃的HTTP状态码
|
307
|
Temporary Redirect
|
临时重定向。与302类似。使用GET请求重定向
|
400
|
Bad Request
|
客户端请求的语法错误,服务器无法理解
|
401
|
Unauthorized
|
请求要求用户的身份认证
|
402
|
Payment Required
|
保留,将来使用
|
403
|
Forbidden
|
服务器理解请求客户端的请求,但是拒绝执行此请求
|
404
|
Not Found
|
服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
|
405
|
Method Not Allowed
|
客户端请求中的方法被禁止
|
406
|
Not Acceptable
|
服务器无法根据客户端请求的内容特性完成请求
|
407
|
Proxy Authentication Required
|
请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
|
408
|
Request Time-out
|
服务器等待客户端发送的请求时间过长,超时
|
409
|
Conflict
|
服务器完成客户端的PUT请求时可能返回此代码,服务器处理请求时发生了冲突
|
410
|
Gone
|
客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
|
411
|
Length Required
|
服务器无法处理客户端发送的不带Content-Length的请求信息
|
412
|
Precondition Failed
|
客户端请求信息的先决条件错误
|
413
|
Request Entity Too Large
|
由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
|
414
|
Request-URI Too Large
|
请求的URI过长(URI通常为网址),服务器无法处理
|
415
|
Unsupported Media Type
|
服务器无法处理请求附带的媒体格式
|
416
|
Requested range not satisfiable
|
客户端请求的范围无效
|
417
|
Expectation Failed
|
服务器无法满足Expect的请求头信息
|
500
|
Internal Server Error
|
服务器内部错误,无法完成请求
|
501
|
Not Implemented
|
服务器不支持请求的功能,无法完成请求
|
502
|
Bad Gateway
|
充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
|
503
|
Service Unavailable
|
由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
|
504
|
Gateway Time-out
|
充当网关或代理的服务器,未及时从远端服务器获取请求
|
505
|
HTTP Version not supported
|
服务器不支持请求的HTTP协议的版本,无法完成处理
|
网络协议栈
协议分层
截止目前为止,对TCP/IP协议的四层有了一定的了解,上层协议的数据被封装至下层协议的数据之中,下层协议提供接口和服务供上层所使用,那应该如何正确理解协议的分层呢?

不能简单理解协议栈分层看上去是封装包头和解包头,实际上每一层都由自己核心的任务,每一层只用关注本层的职责,使用下层的服务,并且每一层都由自己的工作语言。
协议栈 | 工作语言 | 代表 | 主要工作职责 |
---|---|---|---|
应用层 | URL | HTTP | 面向用户,提供万维网访问服务 |
传输层 | TCP端口 | TCP | 管理传输通道,提供可靠性传输接口 |
网络层 | IP地址 | IP | 管理路由于选路,提供数据传输接口 |
链路层 | 物理地址 | 以太网 | 封装底层物理细节,提供数据链路访问接口 |
分层思想人类思维的伟大的结晶,将一个复杂的任务进行抽象,每抽象一次使得任务被划分为几个相对简单的子问题,然后分别对子问题进行求解,最终解决复杂问题。网络协议栈如此,操作系统亦是如此。下面让我关注每一层的职责。
各层职能分析
链路层职能
1) 链路层主要用于管理链路,为网络层进行链路握手,提供数据链路。
通过物理连接,对链路进行管理,为网络层提供路由,发送数据的基础。
2) 链路层只理解链路层的地址,使用链路层地址进行沟通。
在共享式网络环境下,意味着同一网络会同时收到数据报,因此必须有物理地址作为唯一标识,指明由谁来接受数据报,而不用理解上层IP地址,可以想象一台机器可以有多个IP地址(不考虑多个物理网卡),而物理地址是唯一的。
3) 抽象逻辑链路,封装物理细节不同。
不同的物理特性决定链路层协议,链路层封装物理细节,提供抽象逻辑链路接口,为上层使用。
网络层职能
1)提出IP地址概念,作为计算机网络基础。
物理层地址没有共性和规律可遵寻,因而提出IP地址概念,标识通信的主体,IP地址有了网络分类,子网划分的概念,将整个网络进行细分,从而各个计算机进行有序的连接,为后续路由,选路提供基础。
2)路由管理和选路
有了IP地址基础,计算机以IP地址为核心建立有序、有规律可寻的组网关系,从而有了路由的基础。网络层对路由表进行管理,每条路由绑定逻辑链路通道,有了路由表构成路由基础,从而网络层可以更加路由规则对IP数据报进行选路。
传输层职能
1)抽象端口概念
端口用于区分同一物理机器的不同进程,可以使进程各自能够互不干扰进行工作。
2)提供不同的传输服务
UDP对IP很少的封装,使上层协议可以最原始的使用网络层特性
TCP提供可靠的网络传输,可以帮助上层协议解决丢包、乱序等复杂的工作
应用层职能
1)提供不同种面向用户的服务
比如HTTP协议,为用户提供万维网服务,是业务只用关心内容。
2)封装Socket细节
我们知道操作系统协议栈提供Socket界面给上层使用,应用层可以对socket界面进行封装,可以不用暴露给业务程序,提供简单的接口调用,使得业务程序更易于开发,而不用和操作系统接口直接进行交互。
3)总之应用层就是更好的服务于业务程序,如果某种应用场景过于简单,可以直接由业务程序提供服务,直接使用传输层。
协议栈沙漏
沙漏型的协议栈,以TCP/IP协议为核心,应用层协议、链路层协议不断在演变和发展。中间少,两头多的发展态势,类似沙漏型。

小结
我们对HTTP做了一个简单的了解,可以说是类似wiki都阐述,知道HTTP协议都定义些什么,主要做了哪些工作。主要重点是对前几章对一个回顾和总结,探讨了协议栈分层的思想和各层的职能,对网络协议栈轮廓有了一定的了解,有了一个全局的观念,知道基于业务程序开发之下的各个层次的协议的职能和基本工作,为日后学习网络协议栈打下了一点的基础。
参考
《TCP/IP详解-协议》卷一 W.Richard Stevens
HTTP协议介绍 百度百科
HTPP协议基础 wiki
修订
初稿 2014-11-8 Simon
最后
以上就是长情康乃馨最近收集整理的关于计算机网络协议第五章应用层协议,第六章网络协议栈HTTP协议网络协议栈小结参考修订的全部内容,更多相关计算机网络协议第五章应用层协议内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复