用Java服务器程序查看GET和POST两个请求方法的区别

       HTTP中的GET, POST是常用的两个请求方法。当使用GET请求方法时,可以从浏览器url中看到请求的信息。如:​​​​​​云班课 - 用户登录https://www.mosoteach.cn/web/index.php?c=res&m=index在访问资源后,“?”号后带参数的形式,提交给服务器端数据。  而使用POST方法则看不到。服务器接收到的信息有什么区别呢?通过运行下面的代码查看下区别。

public class WebServer {

public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8080);
Socket socket = server.accept();
InputStream in=socket.getInputStream();
byte[] buf=new byte[1024];
int i = in.read(buf);
if (i!=-1) {
System.out.println(new String(buf) );
}
OutputStream out=socket.getOutputStream();
Date now = new Date();

//修改响应页面,查看get和post的区别
//String s="<HTML><head></head><body>\r\n<h1 align=center>hello</h1>\r\n</BODY></HTML>\r\n";
String s="<HTML><head></head><body>\r\n"+
 "<form action=\"http://127.0.0.1:8080/index.html\"  method=\"GET\">"
     + "username:<input type=\"text\" name=username><br>"
     +"password:<input type=\"text\"  name=password><br>"
     + "<input type=\"submit\" value=\"submit\">"
    + "</form>";
String str="HTTP/1.1 200 ok\r\n"
+"Date: " + now + "\r\n"
+"Content-length: " + s.length() + "\r\n"
+"Content-type: text/html;charset=utf-8\r\n\r\n"
+s;
out.write(str.getBytes());
in.close();
out.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

这个服务器程序运行后,从浏览器访问http://localhost:8080。可以看到响应给浏览器一个表单页面。

再启动服务器程序,提交信息后,在控制台中可以看到请求头的变化如下:

    GET /index.html?username=zhangsan&password=123 HTTP/1.1

    Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*

    Accept-Language: zh-CN

    ...

     以上信息在浏览器中调试窗口中也可以看到。

如果把代码<form action="http://127.0.0.1:8080/index.html"  method="GET">中提交方法改为POST,提交信息后,请求头的变化如下:

     可以看出, post 方法提交信息的时候,可以看到请求体在请求头下并且隔着一个空行。这个在有的浏览器调试窗口中也可以看到。

  从请求头中,也可看出Referer这个头的作用。

     通过这个程序,可以直观的看到,两个请求方法在服务器端接收的信息的不同,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值