一、简介
Http 即超文本传输协议,一种建立在 TCP 上的无状态连接,属于应用层协议,http传输的内容都是明文的,不安全的。Http 协议用于客户端与服务器端之间的通信,它规定了客户端与服务端之间的通信格式,包括请求和响应的格式。
Http的基本的工作流程是这样的:客户端发送一个 Http 请求,服务端收到请求之后开始处理,处理结果返回给客户端,客户端对结果进行处理。目前流行的 Http 版本是 HTTP/1.1。这里也主要结合Http1.1总结下Http协议。
二、Http报文
报文是在 Http 应用程序之间发送的数据块,它可以分为请求报文和响应报文,不过它们都是由三部分组成:报文首部、空行、报文主体。
1、请求报文
POST /tools/mockapi/448/weBankstep HTTP/1.1
Host: www.wanandroid.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*
2、响应报文
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Cache-Control: private
Expires: Thu, 01 Jan 1970 08:00:00 CST
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Date: Fri, 15 Mar 2019 13:30:00 GMT
test: {
"good1": "http://a/b/1.png",
"good12": "http://a/b/2.png"
}
3、小结
4、联系实际
- 在开发中我们平时使用的GET、POST请求方法就是被赋值在请求报文的起始行中
- 上面请求报文demo就是模拟用户登录的post请求,看到请求体内的内容是不是很熟悉,其实就是你发送post时上传的用户信息。在发送post请求时被封装到HTTP请求报文的请求体中。
- 最常见的就是浏览器打开网页了吧,其实原理是这样的,比如客户端浏览器请求百度的sever,百度的sever收到请求后找到相应的资源,吧状态码置为200。响应体内返回html string。浏览器解析展示百度网页。
- 其实响应内容可以是很多类型,如图片、视频、html、json 注意上面响应报文栗子Content-Type: application/json;charset=utf-8 说明响应类型为json,json数据编码为utf-8。
上面的都是最常见的栗子了,至于细分的话见下面首部字段分析。首部字段规定的内容还是比较多的。
三、请求报文方法有哪些?
方法 | 说明 | 支持的http协议版本 |
---|
GET | 获取资源 | 1.0、1.1 | POST | 传输请求主体 | 1.0、1.1 | PUT | 传输文件 | 1.0、1.1 | HEAD | 获得报文首部 | 1.0、1.1 | DELETE | 删除文件 | 1.0、1.1 | OPTIONS | 询问支持的方法 | 1.1 | TRACE | 追踪路径 | 1.1 | CONNECT | 要求用隧道协议连接代理 | 1.1 | LINK | 建立和资源之间的联系 | 1.0 | UNLINK | 断开连接关系 | 1.0 |
1、GET:获取资源
-
作用:get方法用来请求访问被URI识别的资源。指定的资源经服务端解析后返回响应内容。 -
例如:get请求的资源为纯文本,服务端就原样返回,如果是向CGI(通用网管接口)那样的程序,则返回经过执行后输出的结果。 -
注意:get 方法时,请求报文的请求体一般为空。get一般不会发送请求体。
2、POST:传输请求主体
3、PUT:传输文件
4、HEAD:获得报文首部
5、DELETE:删除文件
- 作用:用于删除文件,与put请求方法功能相反。在http1.1上与put一样不安全。
6、OPTIONS:询问支持的方法
7、TRACE:追踪路径
TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 1024
TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2
- 注意:trace方法本来就不怎么常用,再加上它容易引发XST(Cross-Site Tracing,跨站追踪)攻击,通常就更不会用到了。
8、CONNECT:要求用隧道协议连接代理服务区旗
CONNECT 代理服务器名:端口号 HTTP版本
CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host: proxy.hackr.jp
HTTP/1.1 200 OK(之后进入网络隧道)
四、响应报文状态码有哪些?
1、状态码主要分为五类
- 1XX:信息性状态码,接收的请求正在处理
- 2XX:成功状态码,请求正常处理完毕
- 3XX:重定向状态码,需要进行附加操作以完成请求
- 4XX:客户端错误状态码,服务器无法处理请求
- 5XX:服务器错误状态码,服务器处理请求出错
3、常见状态码
状态码 | 描述 | 解释 |
---|
200 | 全部资源请求成功 | 从客户端发来的请求在服务器端被正常处理 | 204 | 无响应体请求成功 | 服务器接收的请求已成功处理,但在返回的响应报文中无响应体,对应client端的HED请求 | 206 | 范围资源请求成功 | 客户端进行了范围请求,服务器成功执行了请求。响应报文中包含由 Content-Range 指定范围的响应体内容。 | 301 | 永久重定向 | 代表请求的资源已经被分为了新的URI,需要使用新的URI进行请求 | 302 | 临时重定向 | 请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。 | 303 | 临时重定向 | 303 状态码和 302 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。浏览器会把POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。 | 304 | 临时重定向 | 客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。附带条件的请求是指采用 GET方法的请求报文中包含 If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。 | 307 | 临时重定向 | 浏览器收到响应后不会POST变为GET,大家必须遵守。 |
发送。
表格待续
报文首部字段
待续。。。。
|