Javaweb里的HTTP协议

1.HTTP概述

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

如果想知道http协议的数据传输格式有哪些,可以打开浏览器,点击F12打开开发者工具,点击Network(网络)来查看 

浏览器向服务器进行请求时,服务器按照固定的格式进行解析:

服务器向浏览器进行响应时,浏览器按照固定的格式进行解析:

2.HTTP请求协议

  • 请求协议:浏览器将数据以请求格式发送到服务器。包括:请求行、请求头 、请求体

  • GET方式的请求协议:

  • 请求行(以上图中红色部分) :HTTP请求中的第一行数据。由:请求方式资源路径协议/版本组成(之间使用空格分隔)

    • 请求方式:GET

    • 资源路径:/brand/findAll?name=OPPO&status=1

      • 请求路径:/brand/findAll

      • 请求参数:name=OPPO&status=1

        • 请求参数是以key=value形式出现

        • 多个请求参数之间使用&连接

      • 请求路径和请求参数之间使用?连接

    • 协议/版本:HTTP/1.1

  • 请求头(以上图中黄色部分) :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式

    • http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后,就可以知道是谁,想干什么了

    • 常见的HTTP请求头有:

      • 请求体 :存储请求参数

        • GET请求的请求参数在请求行中,故不需要设置请求体

      POST方式的请求协议:

      • 请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本

        • 请求方式:POST

        • 资源路径:/brand

        • 协议/版本:HTTP/1.1

      • 请求头(以上图中黄色部分)

      • 请求体(以上图中绿色部分) :存储请求参数

        • 请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)

      GET请求和POST请求的区别:

      3.获取请求数据

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

      @RestController
      public class RequestController {
      
          /**
           * 请求路径 http://localhost:8080/request?name=Tom&age=18
           * @param request
           * @return
           */
          @RequestMapping("/request")
          public String request(HttpServletRequest request){
              //1.获取请求参数 name, age
              String name = request.getParameter("name");
              String age = request.getParameter("age");
              System.out.println("name = " + name + ", age = " + age);
              
              //2.获取请求路径
              String uri = request.getRequestURI();
              String url = request.getRequestURL().toString();
              System.out.println("uri = " + uri);
              System.out.println("url = " + url);
              
              //3.获取请求方式
              String method = request.getMethod();
              System.out.println("method = " + method);
              
              //4.获取请求头
              String header = request.getHeader("User-Agent");
              System.out.println("header = " + header);
              return "request success";
          }
      
      }

      4.HTTP响应协议

      • 响应协议:服务器将数据以响应格式返回给浏览器。包括:响应行 、响应头 、响应体

      • 响应行(以上图中红色部分):响应数据的第一行。响应行由协议及版本响应状态码状态码描述组成

        • 协议/版本:HTTP/1.1

        • 响应状态码:200

        • 状态码描述:OK

      • 响应头(以上图中黄色部分):响应数据的第二行开始。格式为key:value形式

        • http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作,这样,对方在收到信息后,就可以知道你是谁,你想干什么

        • 常见的HTTP响应头有:

        •  

      • 响应体(以上图中绿色部分): 响应数据的最后一部分。存储响应的数据

        • 响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)响应状态码

       

      关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:

      • 200 ok 客户端请求成功

      • 404 Not Found 请求资源不存在

      • 500 Internal Server Error 服务端发生不可预期的错误

      5.设置响应数据

      package com.itheima;
      
      import jakarta.servlet.http.HttpServletResponse;
      import org.springframework.http.ResponseEntity;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      import java.io.IOException;
      
      @RestController
      public class ResponseController {
      
          @RequestMapping("/response")
          public void response(HttpServletResponse response) throws IOException {
              //1.设置响应状态码
              response.setStatus(401);
              //2.设置响应头
              response.setHeader("name","itcast");
              //3.设置响应体
              response.setContentType("text/html;charset=utf-8");
              response.setCharacterEncoding("utf-8");
              response.getWriter().write("<h1>hello response</h1>");
          }
      
          @RequestMapping("/response2")
          public ResponseEntity<String> response2(HttpServletResponse response) throws IOException {
              return ResponseEntity
                      .status(401)
                      .header("name","itcast")
                      .body("<h1>hello response</h1>");
          }
      
      }

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

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值