Q:什么是HTTP协议?
概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
https://i-blog.csdnimg.cn/direct/2177a2de22084b3b8ccc67e34ee27d44.png" width="1011" />
特点:
1.基于TCP协议:面向连接,安全
2.基于请求-响应模型的:一次请求对应一次响应
3。HTTP协议是无状态(无状态的是:每一次请求都是独立的,后一次请求不会记录前一次的数据)的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
缺点:多次请求间不能共享数据。(解决方案:会话技术)
优点:速度快(不能共享数据所以传输速度快)
HTTP协议-请求数据格式
如何查看数据格式?在chrome浏览器中按下F12,选择网络-全部,刷新一下之后就可以在名称栏下找到想找到的http请求。点击标头,然后点击原始数据,就可以出现下图所示结果。
请求行:请求数据第一行(请求方式、资源路径、协议)
https://i-blog.csdnimg.cn/direct/f2ade4a201cb407c9c0c71e41b0a5060.png" width="1200" />
请求头:第二行开始,格式key:value
https://i-blog.csdnimg.cn/direct/24a6c28b0a6649239c92dbf7101b01a2.png" width="1200" />
常见的请求头:
https://i-blog.csdnimg.cn/direct/18243c42ada94ae688a9def37e9e5595.png" width="1020" />
请求体:POST请求,存放请求参数
1.请求体在请求头一个空行之后 ( 补充:GET方式的请求是没有请求体的。)
2.请求体一般是json格式的数据,由此我们也可以很明显的看出请求体可以传输更多的数据
(为什么请求体/POST请求可以传输更多的数据?)
https://i-blog.csdnimg.cn/direct/a0cc3f6f92bf401dbea6a7fa7a2a20ce.png" width="740" />
tip:GET方式的请求:设置的参数都是在请求行的 “ ?”后面进行提供,GET请求大小在浏览器中是有限制的。(如:/brand/findAll?name=海绵宝宝&status=1)
POST方式的请求:设置的参数则往往是在请求体中一个完整的json格式的数据,POST请求大小是没有限制的。
小结:
1.Http协议中请求数据分为哪几个部分?
请求行(请求数据的第一行)
请求头(key:value)
请求体(与请求头之间隔了一个空行)
Q:在服务器端我们该如何获取传递过来的请求数据?
https://i-blog.csdnimg.cn/direct/14c36685ce6e4767a00377f685e0f348.png" width="1200" />
具体操作代码:
@RestController
public class RequestController {
@RequestMapping("/request")
public String request(HttpServletRequest request){
// 获取请求方式
String method = request.getMethod();
System.out.println("method:"+method);
//获取请求路径
String requestURI = request.getRequestURI();
System.out.println("requestURI:"+requestURI);
//获取请求参数
String queryString = request.getQueryString();
System.out.println("queryString:"+queryString);
// 获取请求协议
String protocol = request.getProtocol();
System.out.println("protocol:"+protocol);
// 获取请求头
String header = request.getHeader("User-Agent");
System.out.println("header:"+header);
return "success";
}
}
结果:
https://i-blog.csdnimg.cn/direct/5f437835ab094974a753caf0c6d5a847.png" width="657" />https://i-blog.csdnimg.cn/direct/742f17ea66ac4c2aa0701a33dba97354.png" width="653" />
重点tip:
https://i-blog.csdnimg.cn/direct/0d0ddbb1474c4e318b6e555b9b9341fe.png" width="1097" />
实战补充:1.alt+P AI自动生成提示代码
2.// 获取请求头 这里想获取什么请求头,参数里就填什么
String header = request.getHeader("User-Agent");
3.StringBuffer类型的数据java不能直接输出,要再调用toString()方法。