概念
- HTTP == Hyper Text Transfer Protocol
- 超文本传输协议
传输协议:定义了客户端和服务器端通信时,发送数据的格式。
特点
基于TCP/IP的高级协议
默认端口号:80
基于请求/响应模型的:一次请求对应一次响应
无状态的:每次请求之间相互独立,不能交互数据
网页中每一个文件都是一次单独的请求,几张图片,就是几次请求。如下图所示。
历史版本
http 0.9
- 只有一个命令GET
- 没有HEADER等描述数据的信息
- 服务器发送完毕,就关闭TCP连接
- 每一次请求响应都会建立新的连接
http 1.0
- 增加了很多命令,如status code和header
- 多字符集支持、多部分发送、权限、缓存等
http 1.1
- 持久连接:keep-alive
- 复用连接(较http1.0的每一次请求响应都会建立新的连接。好处:节约了连接的资源,提升了传输的速度。)
- 提高性能的关键是低延迟而不是高带宽。
- 较http1.0,对缓存的支持更好
推送:主动发送js、css推送到浏览器。
二进制流:可以并行发送数据。
http 2.0
- 所有数据以二进制传输
- 同一个连接里面发送多个请求不再需要按顺序来
- 头消息压缩以及推送等提高效率的功能
- 所有的请求共用一个连接,可以更有效的使用tcp连接,通过带宽来提升http性能
- 可以减少服务链接的压力,内存减少了,链接吞吐量大了
- 解决浏览器连接数有限的问题
- 资源合并减少请求的优化手段在http2.0来说是没有效果的
请求信息数据 格式
Servlet
类中service()
方法的参数ServletRequest
- 字符串格式,比如:
1 | POST /login.html HTTP/1.1 |
以下关于 请求信息数据格式 的内容有缺省,详细见下一篇博客 《HTTP请求信息数据 - Request》 中。
请求行
- 格式:
请求方式 请求url 请求协议/版本
请求方式
- HTTP协议有7种请求协议,常用的有GET、POST两种
- GET
- 请求参数在请求行中,在url后
- 请求的url长度有限制的
- 不太安全(参数跟在url之后)
- 浏览器控制台显示👇
- POST
- 请求参数在请求体中
- 请求的url长度没有限制的
- 相对安全(参数在请求体中)
- 浏览器控制台显示👇
请求url
- 假设为 /login.html
请求协议/版本
- HTTP/1.1
请求头
- 客户端浏览器告诉服务器一些信息
- 格式:
请求头名称 : 请求头值
- 若有多个,则一行一个。
常见的请求头
Host
User-Agent
Referer
Host
- 请求的主机地址
User-Agent
- 浏览器告诉服务器,我访问你时候使用的浏览器版本信息
- 作用:可以在服务器端获取该头的信息,解决浏览器的兼容性问题
Referer
- 比如上面几张图片的Referer是 http://localhost/login.html
- 告诉服务器,我(当前请求)从哪里来?
- 作用:防盗链、统计工作
- 举个例子:我的网站想播放《战狼2》电影👇
Connection
- keep-alive
- http1.1,表示该链接可以被复用
请求空行
- 就是一个空行(空白行)
- 作用:分割POST请求的请求头和请求体
请求体/请求正文
- 封装POST请求信息的请求参数
下一篇博客 《HTTP请求信息数据 - Request》 中,详细学习了 请求信息数据 - Request。
响应信息数据 格式
Servlet
类中service()
方法的参数ServletResponse
字符串数据,比如:
1 | HTTP/1.1 200 OK |
响应行
- 格式:
协议/版本 响应状态码 状态码描述
响应状态码
- 服务器告诉客户端浏览器本次请求和响应的一个状态。
特点
- 状态码都是3位数字
分类
- 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx状态码
- 2xx:成功。代表:
- 200
- 3xx:重定向。代表:
- 302:重定向
- 304:访问缓存
- 4xx:客户端错误。代表:
- 403:错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。
- 404:请求路径没有对应的资源
- 405:请求方式没有对应的doXxx方法
- 5xx:服务器端错误。代表:500(服务器内部出现异常)
响应头
- 格式:
响应头名称 :值
常见的响应头
- Content-Type
- Content-disposition
Content-Type
- 服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition
服务器告诉客户端以什么格式打开响应体数据
其值:
in-line:默认值,在当前页面内打开
attachment;filename=xxx:以附件形式打开响应体。涉及文件下载等功能。
响应空行
- 就是一个空行(空白行)
- 作用:分割响应头和响应体
响应体
- 传输的数据
- 文件、HTML网页源码等等。比如,
1 | <html> |
下下篇博客 《HTTP响应信息数据 - Response》 中,详细学习响应信息数据 - Response。