先可以看下基础的报文定义:https://www.cnblogs.com/MandyCheng/p/11151803.html
从http报文查看GET与POST的区别:
在网上随便一搜就可以看到此二者区别的具体分析。不过其区别主要是从应用层面来分析,现在我们从http报文层面来看此二者的区别:
首先是几个简单的请求:
一:
@GetMapping("/hello")
public String obtain(@RequestBody Demo demo){
System.out.println(demo);
return "Hello World";
}
@PostMapping("/hello5")
public String obtain5(@RequestBody Demo demo){
System.out.println(demo);
return "Hello World";
}
我们可以看到:
1、GET请求也能使用请求体传输参数。
2、从报文的角度来说,此情况GET/POST只有方法名不同,其他的报文内容都是一样的。(因为HTTP协议就是这样定义的:请求头、请求行、请求体)
二:
@PostMapping("hello1")
public String obtain1(String pc)
{
System.out.println(pc);
return "Hello World1";
}
同样如果该方法就是GET方法、也是如此。
我们看到这两种定义参数传输都是可以的,即参数通过queryString或放到请求体中。
所以我们在搜索了解GET与POST的区别时需要与HTTP协议报文关联,要明白从HTTP报文的角度来说,其实此二者是没有区别的。此二者只是我们从应用层面来定义其的区别。
补充下HTTP请求上传文件的报文:
从socket的角度来看http请求:
先写一个服务器的ServerSocket:
public static void main(String args[]) throws IOException
{
ServerSocket server = new ServerSocket(8080);
while(true){
try{
Socket socket = server.accept();
InputStream inputStream = socket.getInputStream();
byte[] dataS = new byte[1024];
inputStream.read(dataS);
inputStream.close();
System.out.println("request from client " + socket.getInetAddress().getHostAddress());
System.out.println(new String(dataS));
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
然后模拟一个请求:
我们看下serverSocket接收到的内容:
我们知道,Http是一个TCP类型的协议。而Socket应该算是对TCP数据包操作的封装,是一种类似接口API的概念。所以说HTTP协议是对传输的数据格式的定义,即(请求行、请求头、请求体),然后这些数据通过TCP协议传输。