GET 和 POST 区别

HTTP简介

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP请求方法

    HTTP请求最初设定了八种方法,这八种方法本质上没有任何区别。只是让请求,更加有语义而已。

请求方式 描述
GET 请求指定的页面信息,并返回实体主体。
POST 向服务器提交数据,数据放在请求体里
HEAD 类似于get请求,只不过响应体不返回,只返回响应头
OPTIONS 返回服务器所支持的请求方法
PUT 只是具有幂等特性,一般用于更新
DELETE 请求服务器删除指定的页面或资源
TRACE 回显服务器收到的请求,主要用于测试或诊断
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

根据w3c标准,GET和POST区别如下:

请求方式 GET POST
后退按钮 / 刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
历史 参数保留在浏览器历史中 参数不会保存在浏览器历史中
对数据长度的限制 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) 无限制
对数据类型的限制 只允许 ASCII 字符 没有限制,也允许二进制数据
安全性 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分 POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中
可见性 数据在 URL 中对所有人都是可见的 数据不会显示在 URL 中

    其实,GET和POST本质上就是TCP链接,两者没有任何区别。他们都是HTTP协议中的请求方法,底层实现都是基于TCP / IP协议。所谓区别,是由于HTTP的规定和浏览器 / 服务器的限制,导致他们在应用过程中体现出一些不同而已。
    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
    IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。

GET和POST的真正区别

  • HTTP协议对GET和POST都没有对长度的限制,所谓的请求长度限制是由浏览器和web服务器决定和设置的,各种浏览器和web服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据web服务器的处理能力来设定
  • GET产生一个TCP数据包,POST产生两个TCP数据包
        1. 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
        2. 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
  • 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效,但据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,具有非常大的优势。而且也并不是所有浏览器都会在POST中发送两次包,Firefox(火狐浏览器)就只发送一次

猜你喜欢

转载自blog.csdn.net/fu983531588/article/details/89384003