分层管理好处:规定好接口协议,那么层次内部设计可以灵活改动。处于应用层之上的应用可以只考虑自己的任务,而不必担心底层传输。
应用层 : 包含FTP,DNS,HTTP
传输层 :包含TCP,UDP协议
网络层 : IP协议(处理数据包,是网络传输的最小单位。
链路层 :硬件部分
每层处理时会进行封装,增加首部信息。
2XX:成功
请求被正常处理
200 OK
204 No Content (服务器接收请求成功处理,但是没有资源可以返回,所以响应报文中不含实体主体,一般用于客户端往服务端发送信息,而客户端不需要回复新内容)
206 Partial Content (对资源一部分的请求,响应报文中包含Content-Range)
3XX :重定向
表明浏览器需要执行某些特殊处理来正确处理请求
301 Moved Permanently (永久性重定向)
302 Found (临时性重定向)
303 See Other (和302功能相同,但是明确表示客户端应该使用GET方法获取资源)
当遇到301,302,303响应码时,几乎所有浏览器都会把POST 改成GET,并且删除请求报文内的主题,再次自动发送请求。
304 Not Modified (资源已找到,但不符合条件请求。 客户端发送附带条件的请求,服务器允许请求访问资源,但不满足请求的条件,所以返回304,不包含响应主体。 虽然被分在3XX类别里,但和重定向没啥关系。
307 Temporary Redirect (临时重定向)
4XX: 客户端错误
400 Bad Request (请求报文中存在语法错误,需要修改请求内容。
401 Unauthorized (需要认证,未认证或者是认证失败
403 Forbidden (请求被拒绝
404 Not Found (无法找到请求资源
5XX: 服务器错误
500 Internel Server Error (服务器执行请求时发生错误
503 Service Unavailble (服务器繁忙或者停机维护,无法处理请求
请求报文构成:
响应报文构成:
通用首部:
1.Cache-Control: 操作缓存的工作机制,
2.Connection : 两个作用, 1. 控制不再转发的首部字段 2.管理持久化连接
3.Date:表明创建HTTP报文的日期和时间
4.Trailer:说明在报文主体后还记录了哪些首部字段。
5.Transfer-Encoding: 规定传输报文主体时采用的编码方式
6.Upgrade: 用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信,它的参数值可以指定一个完全不同的通信协议。
7.Via: 可以追踪客户端与服务器之间的请求和响应报文的传输路径。 报文经过代理或者网关,会在Via中附加该服务器的信息再进行转发。 Via字段可以用来追踪报文转发,还可以避免请求回环。
请求首部
1.Accept: 通知服务器,能够处理的媒体类型及相对优先级,一次可以指定多种。可以使用q来指定权重,0~1,默认为1。
2.Accept-Charset: 通知服务器用户能支持的字符集和相对顺序,一次可以指定多种。q可以指定权重
3.Accept- Encoding: 通知服务器用户代理支持的内容编码及相对优先级,一次可以指定多种。 gzip,compress,deflate,identity,*(通配符)
4.Accept-Language:通知服务器用户能处理的自然语言集及相对优先级。
5.Authorization: 告知服务器用户的认证信息。
6.Expect:客户端用Expect来告知服务器,期望出现的某种特定行为。当服务器无法理解客户端的期望作出回应而发生错误时,会返回417Expectation Failed。
7.From:告知服务器用户的电子邮件地址。
8.Host:告知服务器请求的资源所处的互联网主机名和端口号。 (HTTP1.1规范中唯一一个规定必须包含在请求内的首部字段)
9.If-xxx:条件请求,服务器收到带附加条件的请求,只有符合判断条件时,才会执行请求。
10.Proxy-Authorization: 接收到从代理服务器发来的认证质询时,客户端会发送包含Proxy-Authorization 的请求来告知服务器认证所需要的信息。类似于客户端与服务器之间的HTTP访问认证,不过是发生于客户端和代理之间。
11.Range:对于只需要获取部分资源的范围请求,可以用Range指定资源范围。成功返回指定部分资源是206 Partial Content,如果无法处理范围请求,会返回200 OK和全部资源
12.Referer: 告知服务器请求的原始资源路径。
13.User-Agent:告知服务器创建请求的浏览器和客户端等信息。
响应首部:
1.Accept-Ranges: 告知客户端是否能处理范围请求,来指定获取服务器端某个部分的资源。 可处理范围请求时值为bytes,不能处理时值是none
2.Age:告知客户端 源服务器在多久前创建了响应,单位是秒。(因为可能是缓存。 代理创建响应时必须带Age字段。
3.ETag:告知客户端实体标识,可将资源以字符串形式做唯一性标识的方式,当资源更新时,ETag也会更新。每份资源都有自己的ETag。
ETag 分为 强ETag(不论实体发生多细微的变化都会改变值)和 弱ETag(只用于区分资源是否相同,只有资源根本改变才会改变弱ETag值)
4.Location:可以将响应接收方引导到某个与请求URL位置不同的资源上去。会配合重定向使用。
5.Proxy-Authenticate: 把由代理服务器要求的认证信息发送给客户端。
6.Retry-After:告知客户端应在多久后再次发生请求。配合503 Service Unavailable 使用,或者3XX Redirect使用。
7.Server: 告知客户端当前服务器上的HTTP服务器应用程序的信息。
实体首部:
1.Allow:通知客户端能支持的所有HTTP方法,
2.Content-Encoding:实体主体部分选用的内容编码方式。 gzip,compress,deflate,identity
3.Content-Language: 实体主体使用的自然语言
4.Content-Length:实体主体部分的大小,如果对实体主体进行内容编码传输后,就不用Content-Length了。
5.Content-Location:表示报文主题返回资源对应的地址。
6.Content-MD5: 一串由MD5算法生成的值,目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。 客户端会对接收的报文主体进行相同的MD5算法然后与首部字段比较。
7.Content-Range:针对范围请求,返回此字段告诉客户端实体中那个部分符合范围请求。
8.Content-Type:实体主体内对象的媒体类型。
9.Expires:资源失效时间。
10.Last-Modified:资源最后一次被修改的时间。