HTTP协议
一、概述
-
协议:协议是指双方,或多方,相互约定好,大家都需要遵守的规则。
-
HTTP协议:又叫超文本传输协议,是客户端和服务器之间通信时,发送的数据,需要遵守的规则,其通过网络传输HTML文档数据。HTTP协议中传输的数据叫报文。
-
特点:
- 基于TCP/IP的高级协议。
- HTTP可以传输任意数据类型,比如文本,图片,音频,视频等。
- 基于请求/响应模型的:一次请求对应一次响应。
- 无状态的:每次请求之间相互独立,不能交互数据。
二、请求
-
客户端给服务器发送数据称为请求。
-
分类:
- GET请求:会把请求参数拼接在URL后面,数据大小有限制,get请求没有请求体。
- POST请求:请求会将请求参数放到请求体里面,数据大小无限制。
2.1 GET请求
格式:
- 请求行:
- 格式:请求方式 /请求的资源路径?请求参数 协议/版本
- 例如:
GET /login.html HTTP/1.1
- 请求头
- 格式:key:value,value
- 例如:
Accept: text/plain, text/html
2.2 POST请求
格式:
- 请求行:
- 格式:请求方式 /请求的资源路径?请求参数 协议/版本
- 例如:
POST /login.html HTTP/1.1
- 请求头
- 格式:key:value,value
- 例如:
Accept: text/plain, text/html
- 请求空行:用于分割POST请求的请求头,和请求体的。
- 请求体:封装POST请求消息的请求参数的,就是发送给服务器的数据。
请求代码案例:
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
2.3 常用的请求头
Header | 解释 | 示例 |
---|---|---|
Accept | 指定客户端能够接收的内容类型 | Accept: text/plain, text/html |
Accept-Charset | 客户端提交的表单使用的编码类型 | Accept-Charset: iso-8859-5 |
Accept-Encoding | 浏览器发给服务器,声明浏览器支持的编码类型 | Accept-Encoding: compress, gzip |
Accept-Language | 浏览器可接受的语言 | Accept-Language: en,zh |
Connection | 表示是否需要持久连接。(HTTP 1.1 默认进行持久连接) | Connection: close |
Host | 指定请求的服务器的域名和端口号 | Host:localhost:8080 |
User-Agent | User-Agent 的内容包含发出请求的用户信息 | User-Agent:Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) |
Date | 时间 | Date: Tue, 11 Jul 2000 18:23:51 GMT |
三、响应
3.1 基本内容
- 服务器给客户端回传数据称为响应。
格式:
- 响应行
- 格式:协议/版本 响应状态码 响应的描述
- 例如:
HTTP/1.1 200 OK
- 响应头
- 格式:key:value
- 例如:
Server:apache tomcat
- 响应空行:用于分割响应头和响应体的。
- 响应体:服务器回传给客户端的数据。
响应代码案例:
HTTP/1.1 200 OK
Server:apache tomcat
Content-Encoding: gzip
Content-Length: 80
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>
3.2 响应状态码
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
-
1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
-
2xx:成功。代表:200
-
3xx:重定向。代表:302(重定向),304(访问缓存)
-
4xx:客户端错误。
代表:
* 404(请求路径没有对应的资源)
* 405:请求方式没有对应的doXxx方法
- 5xx:服务器端错误。代表:500(服务器内部出现异常)
3.3 常用的响应头
Header | 解释 | 示例 |
---|---|---|
Location | 用来重定向接收方到非请求 URL 的位置来完成请求或标识新的资源 | Location: http://www.baidu.org/index.jsp |
Server | 服务器型号 | Server: apache tomcat |
Content-Encoding | web 服务器支持的返回内容压缩编码类型。 | Content-Encoding: gzip |
Content-Type | 服务器返回的文本采用编码类型 | Content-Type: text/html; charset=GB2312 |
Content-Length | 数据长度 | Content-Length: 80 |
Content-Language | 语言环境 | Content-Language: zh-cn |
Date | 请求响应的时间 | Date: Tue, 11 Jul 2000 18:23:51 GMT |