从http报文查看GET与POST的区别,以及从Socket来看http

    先可以看下基础的报文定义: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协议传输。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值