HTTP协议下的GET方法和POST的区别 理解

来源:互联网 发布:coc王升级数据 编辑:程序博客网 时间:2024/05/17 03:11

1.get和post的区别

(1)url长度
get的长度只有2k,如果数据太长了,也容易丢失数据。(get必须是ASCII字符)
而post的是无限制的,这样可以美观,比如博客的地址,如果地址很长,那看起来也不美观,(post支持整个ISO10646字符集)


(2)安全性
get的请求值都反应到url上了,
而post则没有,数据放置在HTML HEADER内提交,不让客户端看到,也相对安全了

(3)网页刷新时,是否过时
get方法请求在网页刷新的时候,如果过时,则不会显示“网页已过时,要重新传输数据”
而post方法在在网页刷新的时候,如果过时,则会显示“网页已过时,要重新传输数据”

容易误解的字眼:
Get是向服务器发索取数据的一种请求,用MIME类型application/x-www-form-urlencoded的urlencoded文本的格式传递参数
而Post是向服务器提交数据的一种请求,
在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!


怎么做:
(1)所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;
如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好
如果要做表单的请求(注册和登录时),应该用post
(2)php方法:post可以用$HTTP_POST_VALUE[],get用$HTTP_GET_VALUE[]来获取值,也可以是$_GET和$_POST方法
 ASP中:对于get方式,服务器端用Request.QueryString获取变量的值,
 对于post方式,服务器端用Request.Form获取提交的数据。


扩展知识点:HTTP协议

 GET /css/news070130.css HTTP/1.1
 Accept: */*
 Referer: http://news.qq.com/a.htm
 Accept-Language: zh-cn
 Accept-Encoding: gzip, deflate
 If-Modified-Since: Thu, 29 Mar 2007 02:05:43 GMT; length=11339
 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
 Host: news.qq.com
 Connection: Keep-Alive
 Cookie: ssid=idlsesels; flv=9.0; icache=ADLFMBGC; adid=adsdifids; isflucky_50829637=0;
       //注意:在语句"Connection:Keep-Alive"下的空行是必须的。

  说明浏览器使用Get方法请求文档/index.html。浏览器则只允许接收纯ASCII码文本文件和HTML文本文件,其使用的引擎是Mozilla/4.5(Netscape)。
 
 POST /Login.php  HTTP/1.1
 Accept: image/gif,*/*
 Accept-language: zh-cn
 Accept-encodeing: gzip
 User-Agent: MSIE6.0
 Host: www.some.com
 Connection: Keep-Alive
 Content-Length: 7
 Cache-Control:no-cache
 Cookie: name1=value1; name2=value2;


 说明:  
  GET: 请求指定的页面信息,并返回实体主体。
   HEAD: 只请求页面的首部。
   POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
   PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
   DELETE: 请求服务器删除指定的页面。
   OPTIONS: 允许客户端查看服务器的性能。
   TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
   PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
   MOVE: 请求服务器将指定的页面移至另一个网络地址。
   COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
   LINK: 请求服务器建立链接关系。
   UNLINK: 断开链接关系。
   WRAPPED: 允许客户端发送经过封装的请求。
   Extension-mothed:在不改动协议的前提下,可增加另外的方法。

  User-Agent:客户端的浏览器信息。
  Connection:close表示使用短连接,Keep-Alive表示客户端支持持久连接。
  Date:消息产生的当前时间。
  Accept-Language:客户端支持的语言。
  Cache-Control:客户端是否支持cache。no-cache表示客户端不支持cache,如max-age=3600,告诉User Agent 该请求的响应结果在多长时间内有效,在有效期内,当用户再次需要访问时,直接从客户端本地提取,不需要访问服务器。
  Referer:Referer用以告诉服务器该请求来自于哪个URL,可以用追踪用户的WEB访问路径。
  If-Modified-Since: 如果请求消息包含If-Modified-Since标题域,GET方法的语法就变成“条件GET”,即“(conditional GET)”。 条件GET方法可以对指定资源进行判断,如果它在If-Modified-Since标题域中的指定日期后发生了更新,才启动传输,否则不传输。这种条件GET允许被缓存的实体在不必经过多次请求或不必要的数据传输就能进行刷新,从而有助于降低网络负载。
  Last-Modified: Sun, 03 Dec 2008 23:52:56 GMT
  ETag: “1cbf3-dfd-3a2adcd8″
   一般应用在文件下载上,用于标识响应内容的最后修改时间或内容较验码,当下一次User agent需要时,服务首先判断这二个值是否跟服务器上一致,一样则不需要返回内容。
  Expires:该请求的响应结果在什么时间失效,在没有失效之前,代理可直接从缓存中返回以前的响应结果。
  Host:指定请求资源的主机和端口号。HTTP/1.1请求必须指定Host,否则服务器会返回400状态码。

 当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
 ① 客户方错误
   100  继续
   101  交换协议
 ② 成功
   200  OK
   201  已创建
   202  接收
   203  非认证信息
   204  无内容
   205  重置内容
   206  部分内容
 ③ 重定向
   300  多路选择
   301  永久转移
   302  暂时转移
   303  参见其它
   304  未修改(Not Modified)
   305  使用代理
 ④ 客户方错误
   400  错误请求(Bad Request)
   401  未认证
   402  需要付费
   403  禁止(Forbidden)
   404  未找到(Not Found)
   405  方法不允许
   406  不接受
   407  需要代理认证
   408  请求超时
   409  冲突
   410  失败
   411  需要长度
   412  条件失败
   413  请求实体太大
   414  请求URI太长
   415  不支持媒体类型
 ⑤ 服务器错误
   500  服务器内部错误
   501  未实现(Not Implemented)
   502  网关失败
   504  网关超时
   505 HTTP版本不支持

原创粉丝点击