用于HTTP协议交互的信息被称为HTTP报文,客户端的HTTP报文叫做请求报文,服务端的叫做响应报文。报文大致分为报文首部和报文主体,但并不一定要有报文主体。
字段 说明 请求行 请求方法,请求URI和HTTP版本 状态行 响应结果的状态码,原因短语和HTTP版本 首部字段 请求和响应的各种条件和属性的各类首部:通用首部、请求首部、响应首部、实体首部 其他 HTTP的RFC里未定义的首部(Cookie等)
HTTP在传输数据时可以按照数据原貌直接传输也可以在传输过程中编码提升传输速率;通过编码可以处理大量请求但会消耗更多的CPU等资源。
通常报文主体等于实体主体,但当传输中进行编码时,实体主体的内容发生变化才会与报文主体产生差异。
HTTP中的内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并负责解码。
常用的内容编码:
gzip(GNU ZIP)compress(UNIX系统的标准压缩)deflate(zlib)identity(不进行编码)分块传输编码会将实体主体分成多个块,每一块都会用十六进制来标记快的大小,而实体的最后一块会使用“0(CR+LF)”来标记。
由接收的客户端负责解码,回复到编码前的实体主体。
HTTP中的多部分对象集合即发送一份报文主体内可含有多类型实体,通常是图片或文本文件上传等。
多部分对象集合包含的对象:
multipart/form-data:在web表单文件上传时使用multipart/byteranges:状态码206响应报文包含了多个范围的内容时使用指定范围发送的请求叫做范围请求,对于一份10000字节大小的资源,如果使用范围请求,可以只请求5001-10000字节内的资源。
执行范围请求时,会用到首部字段Range来指定资源的byte范围
内容协商机制是指客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最合适的资源。内容协商会以响应资源的语言、编码方式等作为判断的基准。
内容协商类型:
服务器驱动协商客户端驱动协商透明协商状态码即服务器返回的请求结果。
状态码 类型 说明 1xx Informational(信息性状态码) 接收的请求正在处理 2xx Success(成功) 请求正常处理完毕 3xx Redirection(重定向) 需要进行附加操作以完成请求 4xx Client Error(客户端错误) 服务器无法处理请求 5xx Server Error(服务端错误) 服务器处理请求出错
表示请求已成功处理,但在返回的响应报文中不含实体的主体部分。
该状态码表示客户端进行了范围请求,服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
永久性重定向,表示资源已被分配了新的URI,以后应使用新的URI。
临时性重定向,表示请求的资源已被分配了新的URI,但是临时性的。
表示由于请求的资源存在另一个URI,应使用GET方法重定向获取请求的资源。
表示客户端发送附带条件的请求时(GET中的If-Modified-Since等首部),服务器允许访问资源,但未满足附带条件因此直接返回304(服务器的资源未改变,可直接使用客户端未过期的缓存),不包含任何响应的主体部分。
临时重定向,该状态与302有相同的含义。
表示请求报文中存在语法错误,需修改内容重新发送请求。
表示需要通过HTTP认证。
表示请求被服务器拒绝,未获得访问授权。
表明服务器上找不到请求的资源,也可以在服务器拒绝请求且不想说明理由时使用。
表明服务器在执行请求时发生了错误,也可能是Web应用存在bug或临时故障等。
表明服务器暂时处于超负荷或正在进行停机维护,现在不能处理请求。
