http协议中的请求方法
-
GET方法通常用于请求服务器发送某个资源,比如请求指定的页面信息,返回实体主体(使用GET方法的请求应该只是获取数据,并且不应对数据产生影响)。
-
HEAD方法与GET方法的行为很类似,但是服务器在响应中只返回首部,不会返回主体部分。这就允许客户端在为获取实际资源的情况下,对资源的首部进行检查,比如查看响应的状态码,返回资源的类型等。
-
POST方法向指定资源提交数据进行处理请求,例如提交表单或者上传文件等。数据被包含在请求体中,POST请求通常会导致新的资源的建立或已有资源的修改。
-
PUT方法用于将数据发送到服务器以创建或者更新资源,实际上就是让服务器用请求的主体部分来创建一个由请求的URL命名的新文档,如果那个URL已经存在,就用这个主体替代它。POST方法和PUT方法没有刻意的区分,根据语义使用。
-
TRACE方法,客户端发起一个请求时候,这个请求可能要穿过防火墙、代理、网关等应用,每个中间节点可能修改原始的http请求,TRACE方法允许客户端在最终将方法请求发送给服务器的时候,看看此时的http请求的真实样子(TRACE请求中不能带有实体的主体部分,TRACE响应的实体主体部分包含了响应服务器收到的请求的精确副本)。
-
OPTIONS方法用于描述目标资源的通信选项。比如询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。
-
DELETE方法所做的事情就是请求服务器删除请求URL所指定的资源。(注意:客户端无法保证删除操作一定被执行,因为http允许服务器在不通知客户端的情况下撤销请求)。
-
CONNECT方法建立一个到由目标资源标识的服务器的隧道(就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。这样用户就可以访问到一些只有服务器上才能访问到的网站了,这就是HTTP代理。)。
-
下面是http/1.1中没有规范定义的方法,也就是扩展方法
方法 描述 LOCK 允许用户“锁定资源”,防止别人对齐进行修改 MKCOL 允许用户创建资源 COPY 便于在服务器上复制资源 MOVE 在服务器上移动资源
结论: 从语义上来理解,表格的查询应该是用get方法,表单的提交或者编辑应该是post方法,但是具体情况具体分析吧!
get方法和post方法的区别?
也许你会轻轻松松的给出下面这些答案:
-
GET参数通过url传递,POST放在request body中
-
GET比POST更不安全,GET参数通过URL传递,参数直接暴露出来,POST放在Request body中(但是从传输层面来理解,它们都是不安全的,因为http是明文传输,要想安全传输只有加密,也就是https)。
-
GET请求会被浏览器主动cache,而POST不会。(我们利用get请求访问一个页面内容,那么这个页面内容会被缓存在浏览器中,短时间再次访问,其实拿到的是缓存的内容,而post请求是不可以被缓存的)
-
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
-
GET请求在URL中传送的参数是有长度限制的,而POST没有(HTTP 协议 未规定 GET 和POST的长度限制,GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度,不同的浏览器和WEB服务器,限制的最大长度不一样,大多数浏览器通常都会限制url长度在2K个字节,而大多数服务器最多处理64K大小的url)。
-
GET产生一个tcp数据包,POST产生两个tcp数据包。[对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据),产生一个TCP数据包。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据,产生两个TCP数据包),但是并不是所有的浏览器都会在post中发送两次包,比如Firefox只会发送一次]
-
GET在浏览器回退时是无害的,而POST会再次提交请求。
-
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
事实真的如此?真相——GET和POST没有区别!!!
首先http协议是应用层的协议,在通信的时候是基于传输层的tcp协议,也就说get和post本质上都是tcp连接,get和post能做的事情是一样的(比如,get加上request body ,给post带上url参数,技术上是可以实现的),它们只是语义上面的不同。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
Why?
为什么http和浏览器/服务器要进行限制呢?我的理解是,不同的资源应该对应不同的操作权限,比如有些资源只能请求主体,但不希望更改主体,从语义的角度来说应该要用get方法。对请求方法进行限制以后,就像制定了交通规则,是一种规范,使得整个网络传输的过程中不会出现非常混乱的情况。
从http到tcp
在下面这两张张图中,我们可以看见请求数据和http首部被一起作为tcp数据块,然后tcp首部和tcp数据块一起被作为ip数据包,从最上面的应用层到传输层再到网络层。