一天一个java知识点----Http协议

HTTP协议

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

  • 特点:
  1. 基于TCP协议:面向连接,安全
  1. 基于请求-响应模型的:一次请求对应一次响应
  1. HTTP协议是无状态的协议:对于事务处理没有记忆能力每次请求-响应都是独立的
  • 缺点:多次请求间不能共享数据
  • 优点:速度快。

HTTP-请求协议

HTTP-请求数据格式

  • 请求行(请求数据的第一行)
  • 请求头(key:value)
  • 请求体(与请求头之间隔了一个空行

请求方式-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>");
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值