我终于知道post和get的区别


我终于知道post和get的区别

文章插图

IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍 。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了 。
此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员 。
码农:你知道get和post请求到底有什么区别?
程序员:你看这篇就知道了 。
码农:你月薪三万了?
程序员:嗯 。
码农:你是怎么做到的?
程序员:我做梦做到的
前言这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎 。
关于get和post如果你有条件上百度的话,至少有200百万条结果,每个人都有每个人的思考,当然,这篇也是我的思考,如果有些结论有错误,希望能够喷起来 。在批评中不断改进,与诸君共勉一句话:若批评无意义,则赞美无意义 。
01 特点1.1 http的特点
  • 基于tcp/ip、一种网络应用层协议、超文本传输协议HyperText Transfer Protocol
  • 工作方式:客户端请求服务端应答的模式
  • 快速:无状态连接
  • 灵活:可以传输任意对象,对象类型由Content-Type标记
  • 客户端请求request消息包括以下格式:请求行(request line)、请求头部(header)、空行、请求数据

我终于知道post和get的区别

文章插图
 
服务端响应response也由四个部分组成,分别是:状态行、消息报头、空行、响应正文
我终于知道post和get的区别

文章插图
 
1.2 请求方法
http请求可以使用多种请求方法 。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法 。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法 。
  • 1 GET 请求指定的页面信息,并返回实体主体 。
  • 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  • 3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件) 。数据被包含在请求体中 。POST请求可能会导致新的资源的建立和/或已有资源的修改 。
  • 4 PUT 从客户端向服务器传送的数据取代指定的文档的内容 。
  • 5 DELETE 请求服务器删除指定的页面 。
  • 6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 。
  • 7 OPTIONS 允许客户端查看服务器的性能 。
  • 8 TRACE 回显服务器收到的请求,主要用于测试或诊断 。
1.3 我们耳熟能详的的区别
【我终于知道post和get的区别】http协议最常见的两种方法GET和POST,这几点答案其实有几点并不准确
  • 请求缓存:GET 会被缓存,而post不会
  • 收藏书签:GET可以,而POST不能
  • 保留浏览器历史记录:GET可以,而POST不能
  • 用处:get常用于取回数据,post用于提交数据
  • 安全性:post比get安全
  • 请求参数:querystring 是url的一部分get、post都可以带上 。get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)
  • 请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制
02 常见的误区get和post误区
针对上面常见的区别,如果面试的时候这么说,肯定是有很大的毛病,刚在学校面试的时候也曾经囫囵吞枣地这样说过,现在回过头再想以前的错误认知,又有许多新的认识 。
2.1 误区一
“用处:get常用于取回数据,post用于提交数据”
曾听到过这样一种说法:get替换post来优化网站性能,虽然这种说法没错,也的确get常被用于取回数据,但是post也被一些ui框架使用于取回数据,比如kendo ui中的grid,就是用post来接受数据的 。所以结论是get、post用途也是因地制宜 。如果你有使用过kendo UI,会发现分页、过滤、自定义的参数都包含在form data里面 。
请求参数
get是querystring(仅支持urlencode编码),post是放在body(支持多种编码)
query参数是URL的一部分,而GET、POST等是请求方法的一种,不管是哪种请求方法,都必须有URL,而URL的query是可选的,可有可无 。
2.2 误区二
“请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制”


推荐阅读