请求报文的方法及get与post的区别

请求的起始以方法作为开始,方法用来告诉服务器要如何做。

在开发中通常有两种请求方式。

  • get方式: 是以实体的方式得到由请求 URI 所指定资源的信息,如果请求 URI 只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
  • post方式: 用来想目的服务器发出请求,要求它接收被附在请求后的实体,并把它当作请求队列中请求 URI 所指定资源的附加新子项,所以 post 请求可能会导致新的资源的建立和 / 或已有资源的修改。

除了以上两种常用的请求方式,还有另外五种请求方法。说明如下。
(1) HEAD: 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
(2)DELETE: 请求服务器删除指定的页面。
(3)CONNECT: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
(4)OPTIONS: 允许客户端查看服务器的性能。
(5)TRACE: 回显服务器收到的请求,主要用于测试或调试。

get与post的区别

图片摘取于百度

 

接下来,根据百度的答案逐一分析。
(1) get是从服务器上获取数据,post是向服务器传送数据。
看一下HTTP RFC 文档对这两种请求的定义。
根据HTTP规范,get用于信息获取,而且应该是安全的和幂等的。
post表示可能会修改服务器上资源的请求。

通俗的来讲,我们可以从两个角度看待get请求。

  • 从发送请求的角度,get请求相当于我们在数据库中做了查询的操作,这样的操作不影响数据库本身的数据。
  • 从接收返回数据的角度,幂等的含义简单地说就是发送get请求不改变返回数据的内容。

例如,你发送get请求获取测试论坛的首页信息。首页信息并不会因为你发了请求而改变。因为get用于不改变返回信息内容的请求,所以HTTP规范定义它是安全的,就像对数据库不做增删改操作,只查询数据一样。

而post的用途呢,表示会改变服务器上所返回资源信息的请求,相当于我们在数据库中做了修改的操作,会影响数据库本身的数据。

例如,你在测试论坛网上发了帖子,做了评论,得到了积分等。这种情况下,资源状态被改变了,所以HTTP规范定了post请求是可能会改变服务器资源的请求。

通过HTTP规范的定义,可以看出get和post都是用作传递及获取服务器信息的请求。get请求也可以向服务器传递数据,post请求也需要服务器返回数据。

(2)get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
这个答案是在叙述get和post表现形式的不同

  • get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以 ? 分割URL和传输数据,多个参数用 & 连接。post请求就是把提交的数据放置在HTTP包的 body 中。

这种形式是HTML标准对HTTP协议用法的约定,并不能作为post和get请求的区别。现在也有很多Web Server支持get中包含body的表现形式。

(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

  • 这个答案有点不知所云,获取请求变量的值是由服务器端的配置所决定的。这些与post和get请求的区别完全没有关系。

(4)get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
在HTTP协议规范中,没有对传输的数据大小进行限制,也没有对URL长度进行限制。
如果说对于用get请求URL上有限制的话,取决于以下两方面

1.HTTP客户端浏览器自己的限制: 如IE限定URL长度为2083字节,opera是4050,Netscape是8192等。
2.Web服务器为了效率及安全的考虑,,所以修改Apache、IIS的配置对post提交数据大小进行的限制。

限制并不能作为post和get请求的区别,所以这个答案继续是错的。

(5)get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
我们猜测一下这个答案的坐着为何这样说,应该是由于post请求在URL上看不到传输数据吧。

但是在浏览器地址栏上看不到并不能说明它安全,如果你使用截数据包的工具查看没有加密过的post请求,同样可以清晰地看到post报文的内容。
所以说安全不安全根本不是get和post的区别,只和两者是否加密有关。

GET 和 POST 本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

请求报文的方法及get与post的区别的更多相关文章

  1. WCF和WebService中获取当前请求报文的方法

    WCF中: 1. 在hosting WCF的web.config中加入: <system.serviceModel> <serviceHostingEnvironment aspNe ...

  2. TIdHTTP get参数带中文解决方法--请求报文

    Post 看起来稍微复杂先,暂不讨论.post 目前按照一般方法有中文名也可以. 拼接时:pointname=九记餐厅&begintime=2017-03-01 00:00:00& 有 ...

  3. Python编程系列---获取请求报文行中的URL的几种方法总结

    在浏览器访问web服务器的时候,服务器收到的是一个请求报文,大概GET请求的格式大概如下: 先随便拿到一个请求报文,蓝色即为我们要获取的 GET  /index.html  HTTP/1.1  Hos ...

  4. Axis通过方法获取webService请求报文

    MessageContext messageContext = _call.getMessageContext(); Message reqMsg = messageContext.getReques ...

  5. HTTP请求报文支持的各种方法

    常见的HTTP方法如下: 1.GET GET是最常用的方法.通常用于请求服务器发送某个资源. 2.HEAD HEAD与GET的行为类似,但服务器在响应中只返回首部,不会返回实体的部分.这就允许客户端在 ...

  6. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  7. [httpserver]如何解析HTTP请求报文

    这个http server的实现源代码我放在了我的github上,有兴趣的话可以点击查看哦. 在上一篇文章中,讲述了如何编写一个最简单的server,但该程序只是接受到请求之后马上返回响应,实在不能更 ...

  8. HTTP请求报文格式

    HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文 一个HTTP请求报文由请求行(request line ...

  9. HTTP 请求报文 响应报文

    引言 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发 ...

随机推荐

  1. C#中的多线程 - 并行编程 z

    原文:http://www.albahari.com/threading/part5.aspx 专题:C#中的多线程 1并行编程Permalink 在这一部分,我们讨论 Framework 4.0 加 ...

  2. sql with 写法

    with h_asign_id as ( select asign_id from assign_h h left join assignment a on a.id = h.asign_id whe ...

  3. February 13 2017 Week 7 Monday

    Don't trouble trouble until trouble troubles you. 不要自寻烦恼. It is the best way to live an easy life if ...

  4. memcached 相关

    今天用了下memcached,把一个日志分析结果的大数组缓存起来,由于实时性跟准确性要求不高,所以缓存一周:因为日志越来越多,不缓存的话每次查看页面会比较慢.(其实可以先离线定期计算好结果存起来).以 ...

  5. BZOJ3143:[HNOI2013]游走(高斯消元)

    Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...

  6. oracle数据库恢复归档脚本

    cat restorearch1.sh rman target / << EOFRUN {SET ARCHIVELOG DESTINATION TO '/archlog1/db2_arch ...

  7. Linux(十一) 文件目录权限 chmod umask chown

    一 文件目录权限定义 首先我们先认识一下文件目录的权限定义,请看下面ls -l的结果我们发现一个文件或者目录的前面有10位的信息,第一位表示文件类型,大概有一下几种类型:d 表示目录 - 普通文件 b ...

  8. Hibernate之openSession与getCurrentSession的区别

    openSession 与 getCurrentSession的区别(1)openSession 每一次获得的是一个全新的session对象,而getCurrentSession获得的是与当前线程绑定 ...

  9. Redis启动问题解决方案

    linux下redis overcommit_memory的问题 我在启动Redis的时候出现如下警告信息. 警告信息:WARNING overcommit_memory is set to 0! B ...

  10. 【转】spring boot web相关配置

    spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...