Http数据包
附:完整笔记目录~
ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!
5.1 Http数据包
-
引子:上文说过,网络间大都靠数据包进行通信,而在应用层中被使用最多的数据包则为Http数据包,在第二章曾介绍了如何借助工具对Http数据包进行拦截。本篇则对Http数据包格式、内容等进行总结。
-
概述:已知Http协议为单向请求,即请求只能由客户端向服务端发起,服务端收到请求后将处理后的结果返回给客户端,此时Http协议断开。而在这段Http协议工作的过程中,我们可以注意到共有两次数据报文的传递,称由客户端向服务端发送的数据报文为请求报文(Request),服务端返回给客户端的数据报文为响应报文(Response)。
本篇则依次对请求报文&响应报文格式、各部分内容进行介绍。(下文分别以请求包&响应包称呼请求报文&响应报文,这俩一个东西) -
请求包格式:请求行,请求头(,空行,请求体)→ 仅在POST/PUT方法存在
其中请求行又由:请求方法、URL和Http协议版本组成,以下为一个典型的Http请求包
-
请求行→请求方法
概念:请求方法是请求行的第一个参数。Http协议支持多种请求方法,在Http/1.1及以上版本中,支持GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT方法。其中最常用的方法则为GET、POST方法。
开发者可针对不同的应用场景使用不同的请求方法,相应的我们也可以根据不同的功能点去推断所使用的请求方法是什么。请求方法 含义 GET 用于从服务器请求指定资源,如请求网页内容等。请求数据被包含至URL中,
而一般情况下浏览器/服务器对接收URL有位数限制,因此请求数据不宜过长。POST 用于向服务器发送数据,如用户登录、文件&表单上传等。发送的数据被包含至请求体中,
而请求体对数据量无限制,因此也解决了大量数据传输的问题。HEAD 与GET类似,只不过服务器在接收HEAD类型的请求时,仅会返回状态行&响应头不会返回响应体。 PUT 与POST类似,用于向服务器上传资源。
只不过PUT在请求包中往往会指定资源的存放路径,而POST则由服务器决定。DELETE 用于在服务器中删除指定资源。 OPTIONS 用于查询服务器支持的HTTP方法。 TRACE 用于回显服务器收到的请求。 CONNECT 预留给能够将连接改为隧道方式的代理服务器使用,
常用于非加密代理服务器与TLS加密服务器间的通信。 -
请求头
概念:请求头由 键: 值 组成,每行一对。请求头 含义 Connection 表示客户端与服务器的连接方式。(keep-alive:当前请求完成
后保持连接(不断开TCP连接),close:当前请求完成后关闭连接)Accept 表示浏览器接受的数据类型。 Accept-Encoding 表示浏览器接受的数据压缩格式。 Accept-Language 表示客户端所偏好的自然语言&区域。 User-Agent 表示客户端操作系统&浏览器类型。 Host 表示当前请求访问的目标地址。 Authorization 表示用户身份认证信息。 Cookie 当前浏览器保存的Cookie信息。(常被用于身份鉴权) Referer 表示当前请求的来源页面。(常用于防盗链,
这也是md写博客时外链图片引用失效的原因。)Origin 表示当前请求的来源域。(与Referer相比,Referer显示来源
的详细信息包括路径&参数等,而Orgin仅显示基本来源域信息。)Content-Type 表示客户端发送请求体类型。 Content-Length 表示客户端发送请求体长度。 -
请求体:常被应用于POST/PUT请求方法,表示由客户端向服务器发送的数据。
-
响应包格式:状态行,响应头,空行,响应体
其中状态行又由:Http/版本、状态码、状态描述组成,以下为一个典型的Http响应包。
-
状态行→状态码
- 概念:服务器返回给客户端的数字,表示服务器对本次请求的处理结果。
- 1xx:信息性响应,表示请求已接受,需继续处理。
- 100:表示服务器已接受请求初始部分,客户端可发送剩余请求。
- 101:表示服务器同意协议切换,如Http切换至WebSocket。
- 2xx:成功响应,表示请求已被成功接收。
- 200:表示请求成功,服务器返回请求资源。(常用于GET&POST)
- 201:表示请求成功,且资源已创建。(常用于POST&PUT)
- 202:表示接收请求,但尚未处理。
- 204:表示请求成功,但未返回内容。(常用于DELETE)
- 3xx:重定向
- 301:永久重定向,常被应用于老页面不再使用,需用户访问新页面。
- 302:临时重定向,常被应用于老页面暂时不使用,需用户访问新页面。
- 303:临时重定向,同302,但规定请求方法为GET。
- 4xx:客户端错误,表示请求有语法错误或无法被实现。
- 400:表示请求语法错误或参数不合法。
- 401:表示请求未通过认证。
- 403:表示服务器收到请求,但拒绝提供服务。
- 404:表示请求资源不存在。
- 405:表示请求方法不被允许。
- 5xx:服务端错误,表示服务器未能实现合法请求。(通俗来说,就是服务器在处理请求时出错)
- 500:表示服务器发生不可预知错误。
- 503:常表示服务器处于超载或维护,暂时无法处理请求,一段时间后可能恢复。
- 505:表示服务器不支持请求使用的Http协议版本。
-
响应头
基本同请求头,这里额外提一下Set-Cookie:表示服务器向客户端设置一个或多个Cookie,客户端在接收到该响应头后保存Set-Cookie值内容。 -
响应体:表示由服务端返回给客户端的数据。
注:本篇所提客户端,其大多是指客户端上的浏览器。