GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。 但是作为一个高端大气上档次的程序
2017-03-21 22:44
1701 查看
GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。
但是作为一个高端大气上档次的程序员,这样回答就弱爆了。
为了搞清楚GET和POST的区别,下面写了一个Java程序来接收HTTP请求。
HTTP是基于TCP协议的,所以可以使用Java最底层的Socket实现。下面的程序仅仅不到10行代码,舍去了异常处理、资源关闭的代码,所以它跟真正的HTTP服务器的差距还略遥远,这里有点标题党了。当然,不要在意这些细节。
[java]
HTTP服务器写好了,下面是客户端。浏览器就是HTTP客户端,不用自己去实现了,只需要写HTML就行。
[html]
GET请求:
设置form的method="get",启动Java程序,用浏览器打开HTML输入。
提交后看Java程序输出:
POST请求:
设置form的method="post",启动Java程序,用浏览器打开HTML输入提交。
Java程序输出:
两个实验可以看出,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中。
转载至:http://www.cnblogs.com/549294286/p/4665842.html
但是作为一个高端大气上档次的程序员,这样回答就弱爆了。
为了搞清楚GET和POST的区别,下面写了一个Java程序来接收HTTP请求。
HTTP是基于TCP协议的,所以可以使用Java最底层的Socket实现。下面的程序仅仅不到10行代码,舍去了异常处理、资源关闭的代码,所以它跟真正的HTTP服务器的差距还略遥远,这里有点标题党了。当然,不要在意这些细节。
[java]
public static void main(String[] args) throws IOException { // 服务器监听端口号8081 ServerSocket serverSocket = new ServerSocket(8081); // 等待接收请求,这是一个阻塞的方法,当请求到来的时候才会继续向下执行 Socket socket = serverSocket.accept(); // 获取请求内容 InputStream is = socket.getInputStream(); InputStreamReader reader = new InputStreamReader(is); // 输出请求内容 while (true) { System.out.print((char)reader.read()); } }
HTTP服务器写好了,下面是客户端。浏览器就是HTTP客户端,不用自己去实现了,只需要写HTML就行。
[html]
<form method="get" action="http://localhost:8081"> name:<input type="text" name="name" /><br> age:<input type="text" name="age" /><br> <input type="submit" /> </form>
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中。
转载至:http://www.cnblogs.com/549294286/p/4665842.html
相关文章推荐
- 上传JSON数据时,url变空,JSON数据不能拼接在url中,需单独放在请求的参数中作为一个整体的value上传
- Android 发送get请求 URL中文参数显示问号的一种解决办法
- form表单采用post提交方式提交,在url后面加问号再传递一个参数,提交后是否能接收到?
- 有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按k
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题
- ajax请求当发送post方式application/json格式数据,url后面又带有参数的时候
- Android客户端发送Post/Get请求到Asp.Net服务端一般处理程序Asp.Net进行参数解析
- 无论url请求什么.都可以拼接class类名.实例化.传递get参数-->给当前控制器-->传递给抽象父类-->都交给抽象父类.这个方法去处理call_user_func_array()
- 在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完整的请求路径和请求所有参数列表,POST的需要getPa
- 在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完整的请求路径和请求所有参数列表,POST的需要getPa
- 向指定 URL 发送GET,POST方法的请求(传入指定url和参数,服务器返回字符串数据)
- ajax碰到请求url过长的问题! ajax中get和post的区别
- JMeter怎么在get URL请求、POST请求中添加动态参数用于服务器段安全验证
- 一个可以模拟GET,POST,PUT,DELET请求的HTTP在线工具
- (编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?
- form表单提交数据get,post请求的区别
- GET和POST有什么区别?及为什么网上的多数答案都是错的。
- 编写一个程序,将输入复制到输出,并将其中的制表符替换为\t,把回退符替换为\b,把反斜杠替换为\\,这样可以把制表符和回退符以可见的方式显示出来。
- 一个简单的Web登录程序 GET和POST的区别
- 我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢?