关于http协议的总结
- http协议知识结构图
- 简介
HTTP(HyperText Transfer Protocol),超文本传输协议,是Web应用的基本协议
HTTP规定了客户端(浏览器)和服务器之间的通信步骤以及通信时所传输的数据的含义。最基本的模型是客户端向服务器发送一个请求,服务器收到请求后解析并处理请求,最后向客户端返回一个响应
HTTP协议主要包括请求和响应两部分
- http请求
请求包含三部分内容:请求行、请求头和请求体
常用请求方式有两种:get和post
get请求的请求信息:
GET /test/register?name=dandan&birthday=2017-09-12 HTTP/1.1 Host: localhost:8080 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)... Accept: text/html,application/xhtml+xml... Referer: http://localhost:8080/test/register.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.8
get请求时会把表单数据(请求参数)追加到请求路径后面,而不是放在请求体中。其中使用?连接请求路径和请求参数,使用=连接键和值,使用&连接键值对
post请求的请求信息:
POST /test/register HTTP/1.1 Host: localhost:8080 Connection: keep-alive Content-Length: 31 Cache-Control: max-age=0 Origin: http://localhost:8080 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)... Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml... Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.8 name=dandan&birthday=2017-09-12
post请求时会把表单数据放在请求体中
请求行 GET /test/register?name=dandan&birthday=2017-09-12 HTTP/1.1
GET |
请求方式 |
/test/register |
请求路径 |
name=dandan&birthday=2017-09-12 |
查询字符串 |
HTTP/1.1 |
协议以及版本号 |
请求头 每个请求头都有特定含义
User-Agent |
浏览器版本等信息 |
Referer |
来源页面 |
Accept-Encoding |
浏览器支持的压缩方式 |
请求体 只在post请求时请求体才可能有数据(请求头和请求体之间需要空一行)
name=dandan&birthday=2017-09-12 |
注意使用HTTP协议传输文本数据时,全部请求信息不可包含非西文字符,比如中文字符,如果需要包含非西文字符,必须在传输数据前使用URL编码把非西文字符编码为西文字符,其实转换是由浏览器自动完成的
- http响应
服务器需要为每个请求都生成一个响应,响应也包含三部分内容:状态行、响应头和响应体
响应内容(响应并不分get或者post):
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Accept-Ranges: bytes ETag: W/"164-1505209589118" Last-Modified: Tue, 12 Sep 2017 09:46:29 GMT Content-Type: text/html;charset=UTF-8 Content-Length: 164 Date: Tue, 12 Sep 2017 09:47:12 GMT <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> 注册成功! </body> </html>
状态行 HTTP/1.1 200 OK
HTTP/1.1 |
协议和版本 |
200 |
状态码 |
OK |
状态描述 |
常见状态码及其含义
200 |
请求处理成功 |
302 |
重定向,浏览器会重新访问Location响应头指定的路径 |
304 |
资源未修改,即告诉浏览器直接使用缓存数据 |
404 |
资源未找到 |
405 |
不支持GET或POST请求(没有重写HttpServlet的doGet()或doPost()) |
500 |
服务器错误(代码抛出异常) |
响应头 每个响应头都有特定含义
Content-Type |
响应体数据类型 |
Content-Length |
响应体数据长度 |
响应体 响应体数据可能是一个页面文本、一张图片等(响应头和响应体之间需要空一行)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> 注册成功! </body> </html>