java服务器http post_Java自己实现HTTP服务器来理解GET和POST区别

GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。

但是作为一个高端大气上档次的程序员,这样回答就弱爆了。

为了搞清楚GET和POST的区别,下面写了一个Java程序来接收HTTP请求。

HTTP是基于TCP协议的,所以可以使用Java最底层的Socket实现。下面的程序仅仅不到10行代码,舍去了异常处理、资源关闭的代码,所以它跟真正的HTTP服务器的差距还略遥远,这里有点标题党了。当然,不要在意这些细节。

[java]

public static void main(String[] args) throwsIOException {//服务器监听端口号8081

ServerSocket serverSocket = new ServerSocket(8081);//等待接收请求,这是一个阻塞的方法,当请求到来的时候才会继续向下执行

Socket socket =serverSocket.accept();//获取请求内容

InputStream is =socket.getInputStream();

InputStreamReader reader= newInputStreamReader(is);//输出请求内容

while (true) {

System.out.print((char)reader.read());

}

}

HTTP服务器写好了,下面是客户端。浏览器就是HTTP客户端,不用自己去实现了,只需要写HTML就行。

[html]

name:
age:

GET请求:

设置form的method="get",启动Java程序,用浏览器打开HTML输入。

提交后看Java程序输出:

GET /?name=XXG&age=23 HTTP/1.1

Host: localhost:8081

Connection: keep-alive

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36

Accept-Encoding: gzip,deflate,sdch

Accept-Language: zh-CN,zh;q=0.8

POST请求:

设置form的method="post",启动Java程序,用浏览器打开HTML输入提交。

Java程序输出:

POST / HTTP/1.1

Host: localhost:8081

Connection: keep-alive

Content-Length: 15

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Origin: null

User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip,deflate,sdch

Accept-Language: zh-CN,zh;q=0.8

name=XXG&age=23

两个实验可以看出,GET和POST参数所在请求数据中的位置不同,这才是GET和POST最基本的区别。

这里科普一下HTTP协议,HTTP请求一般包含三个部分:

Request-Line

Header

Message-Body[GET请求不包含Message-Body]

其中Request-Line,就是请求的第一行,例如上面两个请求:

GET /?name=XXG&age=23 HTTP/1.1

POST / HTTP/1.1

它由三部分组成,请求Method(GET/POST/其他)、Request-URI、HTTP-Version,三个部分中间空格隔开。

Header就是传说中的请求头,键值对的形式,每一条占一行。使用不同浏览器这部分的内容也不同。

Message-Body是请求主体,POST请求参数就在这一部分,它与Header之间必须要用空行隔开,这样服务器才能分清楚Header和Body。Message-Body的长度就是Header中的Content-Length。一般GET请求中是没有这一部分的。

上面POST请求中的参数就是Message-Body:

name=XXG&age=23

所以,如果再有人问GET请求和POST请求的区别,可以回答:

GET请求的参数在URL中,在请求的第一行Request-Line中,而POST请求的参数在请求主体Message-Body中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值