概述
-
概念:Hyper Text Transfer Protocol 超文本传输协议
-
传输协议:定义了客户端和服务器端通信时,发送数据的格式
-
特点:
- 基于 TCP/IP 的高级协议
- 默认端口号:80
- 基于请求/响应模型的:一次请求对应一次响应,一一对应
- 无状态的:每次请求之间相互独立,不能交互数据
-
历史版本:
- 1.0:每一次请求都会建立新的连接
- 1.1:复用连接
请求消息数据格式
请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
- 请求方式:
- HTTP协议有7种请求方式,常用的有2种
- GET:
- 请求参数在请求行中,在 url 后,GET请求方式没有请求体
- 请求的 url 的长度有限制的
- 不太安全
- POST:
- 请求参数在请求体中
- 请求的 url 的长度没有限制的
- 相对安全
- GET:
- HTTP协议有7种请求方式,常用的有2种
请求头:客户端浏览器告诉服务器一些消息
请求头名称:请求头值(键值对形式)
- 常见的请求头:
User-Agent
:浏览器告诉服务器,我访问你使用的浏览器版本信息Referer
:http://localhost/login.html- 告诉服务器,我(当前请求头)从哪里来?
- 作用:
- 防盗链
- 统计工作
- 作用:
- 告诉服务器,我(当前请求头)从哪里来?
请求空行
空行,就是用于分割POST请求的请求头,和请求体的
请求体(正文)
- 封装POST请求消息的请求参数的
请求字符串格式
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/login.html
Upgrade-Insecure-Requests: 1
username=zhangsan
响应消息数据格式
响应行
- 组成:协议/版本 响应状态码 状态码描述
- 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
- 状态码都是3位数字
- 分类:
1xx
:服务器接受客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码2xx
:成功。代表:200
3xx
:重定向。代表:302
(重定向),304
(访问缓存)4xx
:客户端错误。- 代表:
404
:请求路径没有对应的资源405
:请求方式没有对应的 doXxx方法
- 代表:
5xx
:服务器端错误。代表:500
(服务器内部出现异常)
响应头
- 格式:头名称:值
- 常见的响应头:
- Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
- Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- 值:
- in-line:默认值,在当前页面内打开
- attachment;filename=xxx:以附件的形式打开响应体。文件下载
- 值:
响应空行
响应体
传输的数据
响应字符串格式
HTTP/1.1 200
Set-Cookie: JSESSIONID=20E84EA998EFD0B9505A77527844E9D3; Path=/day15; HttpOnly
Content-Type: text/html;charset=UTF-8
Content-Length: 99
Date: Thu, 17 Oct 2019 07:48:04 GMT
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello,response
</body>
</html>