zoukankan      html  css  js  c++  java
  • get与post的区别

    post和get的区别
    post 地址栏不会出现一大串?bjnghfgreygt这样的东西

    如果是get,就会出现了

    1、Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如[url]http://www.mdm.com/test.asp?name=asd&password=sad[/url],数据都会 直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理


    2、 Get 方式需要使用 Request.QueryString 来取得变量的值;而 Post 方式通过 Request.Form 来访问提交的内容


    3、Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击,根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节

    建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 Post 方法


    4、Get 方式提交数据,会带来安全问题,比如一个登陆页面,通过 Get 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码,所以表单提交建议使用 Post 方法;Post 方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出一个对话框

    建议:出于安全性考虑,建议最好使用 Post 提交数据
     
    post和get的不同之处
    GET与POST的区别在于:(对于CGI)
    如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;
    如果以POST方式传输,则参数会被打包在数据报中传送给server,并可从CONTENT_LENGTH这个环境变量中读取出来。
    还有一种情况是,你用的是GET方式,但传送的参数是路径,如:
    ----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a >
    ----这时所传递的参数"/usr/local/bin/pine"存放在PATH_INFO这个环境变量中。环境变量的读取方式为$str=$ENV{'QUERY_STRING'};
    理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,值和表单是一一对应的。比如说,name=John。在队列里,值和表单用一个&符号分开,空格用 号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小。事实上POST方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到这一过程的,所以POST方法比较适合用于发送一个保密的(比如信用卡号)或者比较大量的数据到服务器。
    Post是允许传输大量数据的方法,而Get方法会将所要传输的数据附在网址后面,然后一起送达服务器,因此传送的数据量就会受到限制,但是执行效率却比Post方法好。
    对于GET提交的数据,WWW服务器将把数据放在环境变量QUERY_STRING中;对于POST方法,数据被送到WWW服务器的STDOUT中,然后CGI从自己的STDIN中读取。使用传统的CGI方法,用户必须自己编程来处理这些数据。
    GET与POST的区别在于,如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;如果以POST方式传输,则参数会被打包在数据报中传送给server,并可从CONTENT_LENGTH这个环境变量中读取出来。还有一种情况是,你用的是GET方式,但传送的参数是路径,如: 

    ----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a > 

    ----这时所传递的参数"/usr/local/bin/pine"存放在PATH_INFO这个环境变量中。环境变量的读取方式为$str=$ENV{'QUERY_STRING'};
    总结起来:
    get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在servlet/jsp中就无法处理发挥java的比如vector之类的功能);
    post方式:就传输方式讲参数会被打包在数据报中传输,从CONTENT_LENGTH这个环境变量中读取,便于传送较大一些的数据,同时因为不暴露数据在浏览器的地址栏中,安全性相对较高,但这样的处理效率会受到影响。
    -------------------
     
    在表单里使用”post”和”get”有什么区别
    在Form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同:
    1、Get方法通过URL请求来传递用户的输入。Post方法通过另外的形式。
    2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。

    仔细研究下面的代码。你可以运行之来感受一下:

    代码
    <!--两个Form只有Method属性不同-->
    <FORM ACTION=“getpost.asp” METHOD=“get”>
    <INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
    <INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT>
    </FORM>
    <BR>
    <FORM ACTION=“getpost.asp” METHOD=“post”>
    <INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
    <INPUT TYPE=“submit” VALUE=“Method=Post”></INPUT>
    </FORM>

    <BR>
    <BR>

    <% If Request.QueryString(“Text”) <> ““ Then %>
    通过get方法传递来的字符串是: “<B><%= Request.QueryString(“Text”) %></B>“<BR>
    <% End If %>

    <% If Request.Form(“Text”) <> ““ Then %>
    通过Post方法传递来的字符串是: “<B><%= Request.Form(“Text”) %></B>“<BR>
    <% End If %>

    说明
    把上面的代码保存为getpost.asp,然后运行,首先测试post方法,这时候,浏览器的url并没有什么变化,返回的结果是:
    通过Post方法传递来的字符串是: "Hello World"
    然后测试用get方法提交,请注意,浏览器的url变成了:
    http://localhost/general/form/getpost.asp?Text=Hello+World
    而返回的结果是:
    通过get方法传递来的字符串是: "Hello World"
    最后再通过post方法提交,浏览器的url还是:
    http://localhost/general/form/getpost.asp?Text=Hello+World
    而返回的结果变成:
    通过get方法传递来的字符串是: "Hello World"
    通过Post方法传递来的字符串是: "Hello World"

    提示
    通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果:
    1、登陆页面可以被浏览器缓存;
    2、其他人可以访问客户的这台机器。
    那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。
    建议
    在Form中,建议使用post方法。
  • 相关阅读:
    div3--C. Pipes
    Problem F Free Weights
    H
    Problem C Careful Ascent
    Problem L. World Cup
    Problem E. Bet
    Problem D. Ice Cream Tower
    A. Number Theory Problem
    A
    软考知识点梳理--项目评估
  • 原文地址:https://www.cnblogs.com/ymf123/p/4947984.html
Copyright © 2011-2022 走看看