Http--Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了客户端和服务器端通信时,发送数据的格式Http协议的特点
- 基于TCP/IP的高级协议,默认端口是80
- 基于请求/响应模型的:一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
Http协议的历史版本
- 1.0版本
每次请求响应之后都会断开连接,下一次请求响应又会建立新的连接,即每次请求响应都会建立新的连接
缺点:连接会被多次建立和多次丢弃掉,影响传输速度,消耗资源 - 1.1版本
在一次请求响应之后,连接不会立刻断开,而是会等待一定的时间,如果在这一定时间内,还有其他请求,就会默认使用该连接,而不去建立新的连接,这样就实现了连接的复用
上面说了,Http定义了客户端和服务器通信时传输数据的格式,而传输数据分为两种:
客户端向服务器传输数据: 请求消息数据
服务器向客户端传输数据: 相应消息数据
1、Http请求消息数据格式
- 请求行:请求方式 请求url 请求协议/版本
例如:GET /login.html HTTP/1.1
请求url=虚拟路径+Servlet资源路径 - 请求头:客户端浏览器告诉服务器一些信息
请求头消息以键值对的方式给出:请求头名称:请求头值
常见的请求头:- User-Agent:浏览器告诉服务器,使用的浏览器版本信息,可以在服务器端获取该头的信息,解决浏览器的兼容性问题(可以在服务器端对不同的服务器写不同的逻辑代码,然后根据该头的内容获取浏览器名称,执行对应浏览器的代码)
- Referer:告诉服务器,当前请求从哪里来?可以用来防盗链和统计工作
- 请求空行:一个空行,用于分割请求头和请求体
- 请求体(正文):封装POST请求消息的请求参数
对于请求行中的请求方式,http协议7中请求方式,常用的有2种
- GET:
请求参数在请求行中,跟在url后。
请求的url长度有限制的
不太安全 - POST:
请求参数在请求体中
请求的url长度没有限制的
相对安全
2、Http响应消息数据格式
- 响应行:协议/版本 响应状态码 状态码描述
例如:HTTP/1.1 200 OK
请求url=虚拟路径+Servlet资源路径 - 响应头:服务器告诉浏览器一些信息
响应头消息以键值对的方式给出:响应头名称:响应头值
常见的响应头:- Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
- Content-disposition:服务器告诉客户端以什么格式打开响应体数据
-
常见有两种取值
- in-line:默认值,在当前页面内打开
- attachment;filename=xxx:以附件形式打开响应体,用于文件下载
注意:这个filename是浏览器在弹出框显示,和服务器中要下载的文件名无关
- 响应空行:一个空行,用于分割响应头和响应体
- 响应体(正文):传输的数据
响应状态码
服务器告诉客户端浏览器本次请求和响应的一个状态。状态码都是3位数字
- 1xx:服务器接收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
- 2xx:本次请求响应成功。代表码:200
- 4xx:客户端错误。
- 404:请求路径没有对应的资源-->路径错误
- 405:请求方式没有对应的doxxx方法-->比如浏览器请求方式是Post方式,而客户端没有doPost方法
- 5xx:服务器端错误。代表码:500(服务器内部出现异常)