`

POST与GET的区别

阅读更多
首先我们要知道为什么要用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本质上的区别了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics