其实看过HTTP后,对这两种请求方法还是比较好理解的。
首先我们要知道为什么要用POST和GET。POST和GET是HTTP协议里的请求消息中常用的两种请求方法。
什么是HTTP协议里的请求消息?
HTTP协议是通过客户机先请求然后服务器响应的方式进行通信的。我们要获得对方的WEB服务,就得先发送一个请求消息给服务器,这个消息的格式为: 一个请求行 若干消息头 实体内容 三个部分。
其中“一个请求行”的格式为: 方法 URL HTTP版本
POST和GET就是这里面的“方法”了。
HTTP对他们的解释为:GET 获得Request-URI的标识的资源(Request-URI就是一个WEB地址如:http://bbs.verybat.cn/index.php)
POST 在Request-URI表示资源后附加新数据
是不是看着有些模糊,看例子就不模糊了
GET 获得Request-URI的标识的资源?
什么意思?其实我们在IE里直接输入一个WEB地址就等于是一个GET请求了。获得Request-URI的标识的资源,翻译过来就是获取WEB地址的指定页面的内容。我们来看看他们的原始报文提交的格式.
我们直接打开CMD,输入TELNET WWW.HAO123.COM 80
然后就进入了交互界面,然后我们把下面的内容粘贴到交互截面里(由于TELNET没开启本地回显所以看不到我们粘贴的内容) 请一行行复制,每复制一行回一下车在复制粘贴。不然会报错。因为回车换行符号不同!
GET http://www.hao123.com/index.htm HTTP/1.1
Host: www.hao123.com
复制粘贴两行后连续回车两下,我们就可以看到,我们用GET方法后,他就把 www.hao123.com的主页index.htm的HTML代码全部显示出来了,这就是获取WEB地址的指定页面的内容的意思了!这些操作其实就等于我们在浏览器里输入一个WEB地址。
不过需要注意的是GET请求的最大长度为1KB也就是1024字节。换句话就是请求的WEB地址不能大于1024字节。
虽然HTTP协议的解释说GET只能用来获取数据,但其实GET也是可以用来提交数据的,不过还是有提交的最大长度为1KB也就是1024字节的限制,我们看他用来提交数据的原始报文的格式.
我们架设一个WEB服务器,把下面这代码保存为1.asp,放到WEB服务根目录。
<% num=request("num") pass=request("pass") set fs=server.CreateObject("Scripting.FileSystemObject") set file=fs.OpenTextFile(server.MapPath("test.txt"),8,True) file.writeline num+"--"+pass file.close set file=nothing set fs=nothing response.write "Send OK!" %>
把这些代码保存为1.asp
学过ASP的都知道这是把两个变量num和pass的内容提交到服务器然后写入本ASP文件所在路径下的test.txt文本文件。
但是这没有提供表单让我们提交这两个变量我们怎么提交呢??
我们先用直接在IE的构造一个GET提交的方法来提交数据
如下
http://127.0.0.1/1.asp?num=test&pass=mima
在ASP文件后加一个?号,表示后面有附加数据,然后num=数据的值,多个变量用&符号分开.
这是直接通过IE来进行GET提交的方法,这里可以很清楚的看见,他把提交的内容全部写在WEB地址栏目上了,不安全.
把这个GET提交的语句用原始报文格式表示出来就是,把
GET http://www.hao123.com/index.htm HTTP/1.1 改成
GET http://127.0.0.1/1.asp?num=test&pass=mima HTTP/1.1
Host: www.hao123.com
可以看到他直接把提交内容写在请求URL里了.
POST也可以用来提交数据,不过他没大小限制,提交数据时也不会把提交内容显示的WEB地址栏目里,而是放在数据报文的数据段里,这样就比较安全 了.但是他却不能用来获取数据,这是他们的区别之一.我们来看一下POST的原始报文提交格式,在来和GET的报文提交格式对比一下,就能很清楚发现他们 在提交时的区别了
直接打开CMD,输入TELNET WWW.HAO123.COM 80
然后就进入了交互界面,然后我们把选面的内容粘贴到交互截面里(由于TELNET没开启本地回显所以看不到我们粘贴的内容) 请一行行复制,每复制一行回一下车在复制粘贴。不然会报错。因为回车换行符号不同!
POST http://127.0.0.1/1.asp HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 18 num=test&pass=test
复制粘贴完后连续回车两下,他就完成我们代码的功能了。
用Content-Type: 申明可以无限增加POST提交内容的大小。
可以看到POST语句用Content-Length: 消息头申明了我们要提交内容"num=test&pass=test"的大小。
num=test&pass=test这是就我们提交的内容,可以发现他被放在了报文的数据段里,没放在报文头部.
这就是POST和GET本质上的区别了