HTTP协议
- 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

- 基于TCP协议:面向连接,安全
- 基于请求-响应模型的:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
HTTP-请求协议
HTTP-请求数据格式


请求方式-GET: 请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO&status=1。GET请求大小在浏览器中是有限制的。
请求方式-POST: 请求参数在请求体中,POST请求大小是没有限制的。
HTTP-请求数据获取
- Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。

Java //1. 获取请求方式 String method = request.getMethod(); // GET //2. 获取请求路径 String uri = request.getRequestURI(); // /request StringBuffer url = request.getRequestURL(); // http://localhost:8080/req //3. 获取请求协议 String scheme = request.getScheme(); // http //4. 获取查询字符串 String queryString = request.getQueryString(); // name=Tomcat&age=10&gender=1 //5. 获取请求参数 String name = request.getParameter("name"); // Tomcat //6. 获取请求头 String ua = request.getHeader("User-Agent"); // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit.. //7. 获取POST请求体中的数据, 可以获取输入流, 从而拿到请求体中的数据 ServletInputStream inputStream = request.getInputStream(); |

HTTP-响应协议
响应数据格式

注意:不是每一种服务器响应都有OK。

响应状态码的分类
1xx:响应中,临时状态码
2xx:成功
3xx:重定向


4xx:客户端错误

5xx:服务端错误


响应数据设置
- Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。

Java //1. 设置响应状态码 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); //2. 设置响应头 response.setHeader("Content-Type", "text/html;charset=UTF-8"); //3. 设置响应体 - 获取字符输出流 response.getWriter().write("<h1>Hello HTTP ~</h1>"); |
Java @WebServlet("/response") public class ResponseServlet extends HttpServlet { // 处理get请求,给浏览器响应数据,实际开发中一般不需要开发人员去手动设置响应数据 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("设置响应数据"); //1.设置响应状态码 // resp.setStatus(406); //2.设置响应头信息 resp.setHeader("aa","bb"); //告诉浏览器,响应的数据类型是html,编码是utf-8 resp.setHeader("Content-Type", "text/html;charset=utf-8"); //3.设置响应体 resp.getWriter().println("<h1>Hello 响应数据</h1>"); } } |

注意:响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头。