HTTP协议
HTTP概念
- 概念:Hyper Text Transfer Protocol 超文本传输协议
-
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
-
特点:
- 基于TCP/IP的高级协议
- 默认端口号:80
- 基于请求/响应模型的:一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
-
历史版本:
- 1.0:每一次请求响应都会建立新的连接,资源消耗过大
- 1.1:复用连接,解决了1.0存在的资源浪费问题
-
HTTP请求
概念:客户端发送给服务器端的数据。
-
请求数据格式
-
请求行
- 格式:请求方式 /请求url 请求协议/1.1
POST /login.html HTTP/1.1 - 请求方式:
HTTP有7中请求方式:常见的有POST和GET请求- GET:
1. 请求参数在在请求行中,在url后
2. 请求url有长度限制
3. 不太安全 - POST:
1. 请求参数在请求体中
2. 请求url有长度没有限制
3. 相对安全
- GET:
- 格式:请求方式 /请求url 请求协议/1.1
-
请求头:客户端浏览器告诉服务器一些信息
请求头名称:请求头值- 常见的请求头:
- User-Agent:浏览器告诉服务器,我使用的浏览器版本信息
可以在服务器端获取该头信息,解决浏览器兼容性问题
- Referer:http://localhost/login.html
告诉服务器我(当前请求)从哪里来?- 作用:
- 防止盗用链接
- 统计工作
- 防止盗用链接
- 作用:
- User-Agent:浏览器告诉服务器,我使用的浏览器版本信息
- 常见的请求头:
-
请求空行
- 用于分割POST请求信息的请求头和请求体的
-
请求体(正文内容)
- 封装POST请求参数的信息
-
其它请求头数据
- 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
浏览器告诉服务器它支持的语言 - Connection:keep-alive
连接状态信息,HTTP 1.1所支持
根据不同版本的的HTTP协议而不同,有以下两个版本:
1.0:每一次请求响应都会建立新的连接,资源消耗过大
1.1:复用连接,解决了1.0存在的资源浪费问题
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
-
-
请求数据字符串格式:
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.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
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
username=zhangsan
HTTP响应
概念:服务端响应客户端发送的数据。
- 响应数据格式:
-
响应行
- 组成:协议/版本号 状态码 状态码描述
- 响应状态码:服务器端告诉客户端本次请求和响应的一个状态。
- 状态码都是3位数
- 分类:
- 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间发送给客户端1xx的状态码
- 2xx:成功。代表:200
- 3xx:重定向。代表302(重定向),304(访问缓存)
- 4xx:客户端错误。
代表:- 404:(客户端请求路径没有对应资源)
- 405:请求方法服务器端没有对应的doXxx方法
- 5xx:服务器端错误。代表500(服务器内部出现异常)
-
响应头
常见的响应头:- Content-Type:服务器告诉客户端本次响应数据格式及编码格式
高级浏览器都会进行自动匹配解析。 - Content-disposition:服务器告诉客户段以什么格式打开响应体数据
取值:- in-line:默认值,在当前页面打开
- attachment:filename=xxx,以附件形式打开响应体,如平时遇到的点击下载弹出的小框框,
- Content-Type:服务器告诉客户端本次响应数据格式及编码格式
-
响应空行
-
响应体
服务器返回的html界面或图片等数据
-
名词解释:
-
重定向:例如客户端A,请求服务器C资源的文件f,此时访问路径却是访问A资源,服务器此时就会发送302(重定向码)告诉客户端访C资源的由文件f,并携带着C资源的访问路径。
-
访问缓存:服务端对客户端请求的数据进行分析,如果满足该资源在服务器本地没有发送变化,而且该资源客户端已经访问并缓存到本地了,此时就会发送304(访问换成状态码)告诉客户端,以节约请求资源的浪费。
-
响应数据字符串格式
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>