一、概述:
HTTP是计算机通过网络进行通信的规则,是一个基于请求与响应、无状态的、应用层的协议,常基于TCP/IP协议传输数据。目前任何终端之间的任何一种通信都必须按照HTTP协议进行,否则无法连接。
二、四个基于:
- 请求与响应:客户端发送请求,服务器响应请求;
- 无状态:客户端与服务器建立连接时需要进行一系列的安全认证匹配等,因此会增加等待时间;当服务器响应完请求后,就会立即断开两者的连接,下次请求需要再次建立连接(HTTP/1.1版本可以设置持续连接);
- 应用层:HTTP属于应用层协议,配合TCP/IP使用;
- TCP/IP:是支撑HTTP协议运输的协议。HTTP客户机发起一个与服务器的TCP连接,一旦建立,客户机和服务器进程就可以通过套接字接口访问TCP。
三、HTTP请求报文:
一个HTTP请求报文由请求行(request line)、请求头(request header)、空行和请求数据4个部分组成
请求行:
由3个部分组成:请求方法、请求地址和协议版本
- 请求方法:HTTP/1.1定义的请求放啊有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。常用的是GET和POST两种。
- 请求地址:URL:统一资源定位符,是一种资源位置的抽象唯一识别方法。组成:<协议>://<主机>:<端口>/<路径> (端口和路径有时可以省略)
- 协议版本:协议版本的格式为:HTTP/主版本号.次版本号,常用的有:HTTP/1.0和HTTP/1.1
请求头部:
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。常见有:
请求头 | 说明 |
---|---|
Host | 接受请求的服务器地址,可以是IP端口号,也可以是域名 |
User-Agent | 发送请求的应用程序名称 |
Connection | 指定与连接相关的属性,如Connection:Keep-Alive |
Accept-Charset | 通知服务端可以发送的编码格式 |
Accept-Encoding | 通知服务端可以发送的数据压缩格式 |
Accept-Language | 通知服务端可以发送的语言 |
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行很重要,必不可少。
请求数据:
可选部分,如GET请求没有请求数据,下图为一个POST方法的请求报文:
四、HTTP响应报文:
HTTP响应报文主要由状态行、响应头部、空行及响应数据组成。
状态行:
由3部分组成,分别为:协议版本、状态码,状态码描述。
其中协议版本与请求报文一致,状态码描述是对状态码的简单描述,这里只介绍状态码。
状态码:状态代码为3位数字:
- 1xx:指示信息——表示请求已接收,继续处理。
- 2xx:成功——表示请求已被成功接收、理解、接受。
- 3xx:重定向——要完成请求必须进行更进一步的操作。
- 4xx:客户端错误——请求有语法错误或请求无法实现。
- 5xx:服务器端错误——服务器未能实现合法的请求
以下为几个常见的:
状态码 | 说明 |
---|---|
200 | 响应成功 |
302 | 跳转,跳转地址通过响应头中的Location属性指定(JSP中Foward和Redirect之间的区别) |
400 | 客户端请求有语法错误,不能被服务器识别 |
403 | 服务器接收到请求,但是拒绝提供服务(认证失败) |
404 | 请求资源不存在 |
500 | 服务器内部错误 |
响应报头:
与请求报头类似,为响应报文添加了一些附加信息,常见响应头部如下:
响应头 | 说明 |
---|---|
Server | 服务器应用程序软件的名称和版本 |
Content-Type | 响应正文的类型(是图片还是二进制字符串) |
Content-Length | 响应正文的长度 |
Content-Charset | 响应正文使用的编码 |
Content-Encoding | 响应正文使用的数据压缩格式 |
Content-Language | 响应正文使用的语言 |
响应数据:
用于存放需要返回给客户端的数据信息,下面为一个响应报文的实例: