本文最后更新于14 天前,其中的信息可能已经过时,如有错误请发送邮件到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;
}
}