本文最后更新于168 天前,其中的信息可能已经过时,如有错误请发送邮件到1169063119@qq.com
http协议
概念:超文本传输协议,规定了浏览器和服务器之间数据传输的规则
- http是互联网上应用最为广泛的一种网络协议
 - http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输
 
特点:
- 基于tcp协议:面向连接,安全
 - 基于请求-响应模型的:一次请求对应一次响应(先请求后响应)
 - http协议是无状态的协议:对于事物处理没有记忆能力。每次请求-响应都是独立的
 
优点:速度快
缺点:多次请求之间不能共享数据
HTTP请求协议
Get请求协议:
浏览器将数据以请求格式发送到服务器。包括:请求行、请求头 、请求体

请求行:HTTP请求中的第一行数据。
请求头(以上图中黄色部分) :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式 。
请求体 :存储请求参数
POST方式的请求协议:
请求行、请求头、请求体

请求行:包含请求方式、资源路径、协议/版本
- 请求方式:POST
 - 资源路径:/brand
 - 协议/版本:HTTP/1.1
 
请求头
请求体 :存储请求参数
GET请求和POST请求的区别:

获取请求数据
Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),并在调用Controller方法的时候传递给了该方法
HTTP响应协议
响应协议:服务器将数据以响应格式返回给浏览器。包括:响应行 、响应头 、响应体
响应行:响应数据的第一行。
- 协议/版本:HTTP/1.1
 - 响应状态码:200
 - 状态码描述:OK
 
响应头:响应数据的第二行开始。格式为key:value形式
响应体: 响应数据的最后一部分。存储响应的数据,响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)
响应状态码

设置响应数据
Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。
User.txt
1,daqiao,1234567890,大乔,22,2024-07-15 15:05:45
2,xiaoqiao,1234567890,小乔,18,2024-07-15 15:12:09
3,diaochan,1234567890,貂蝉,21,2024-07-15 15:07:16
4,lvbu,1234567890,吕布,28,2024-07-16 10:05:15
5,zhaoyun,1234567890,赵云,27,2024-07-16 11:03:28
6,zhangfei,1234567890,张飞,31,2024-07-16 11:03:28
7,guanyu,1234567890,关羽,34,2024-07-16 12:05:12
8,liubei,1234567890,刘备,37,2024-07-16 15:03:28
RequestController
package org.example;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RequestController {
    @RequestMapping("/request")
    public  String request(HttpServletRequest request) {
//        1.获取请求方式
           String method = request.getMethod(); //get
            System.out.println("method:" + method);
//        2.获取请求路径(url)
            String url = request.getRequestURL().toString(); //localhost:8080/request
            System.out.println("url:" + url);
//            2.1获取uri
            String uri = request.getRequestURI();  //request
            System.out.println("uri:" + uri);
//        3.获取协议
            String protocol = request.getProtocol(); //HTTP/1.1
            System.out.println("protocol:" + protocol);
//        4.获取请求参数
            String name = request.getParameter("name"); //name=zhangsan
            String age = request.getParameter("age");
            System.out.println("name:" + name + ",age" + age);
//        5.获取请求头
            String accept = request.getHeader("Accept"); //Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537
            System.out.println("accept:" + accept);
            return "ok";
    }
}
ResponseController
package org.example;
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 {
//    第一种方式:使用HttpServletResponse 设置响应数据
    @RequestMapping("/response")
    public void response(HttpServletResponse response) throws IOException {
//        1.设置响应状态码
        response.setStatus(401);
//        2.设置响应头
        response.setHeader("name", "songxiaofang");
//        3.设置响应体
        response.getWriter().write("hello");
    }
//    第二种方式:使用ResponseEntity 设置响应数据
    @RequestMapping("/response2")
    public ResponseEntity<String> response2() {
        return ResponseEntity
                .status(401)  //响应状态码
                .header("name", "songxiaofang") //响应头
                .body("<h1>hello</h1>");
    }
}
HelloController
package org.example;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(String name) {
        System.out.println("name:" + name);
        return "Hello" + name;
    }
}
	


