Author:天添豆浆
计算机科学与技术专业,迷摇滚的理科男
新手村码农,第八篇博客,梳理一下Http中get和post之间的种种…
前言:
最近学习的Servlet中又遇到了doGet()和doPost两种方法,回想起学习java网络时的get和post,查找了各方资料,简单梳理一下…
Http概述
在讲get和post之前,先回顾一下http。
Http(Hyper Text Transfer Protocol)超文本传输协议(not only text);是一个基于TCP/IP的应用层协议,一般用于WWW服务器进行数据传输的一种协议,http是一种请求响应协议,即由客户端通过http协议发起请求,由http服务器提供响应;http是一种无状态的短链接协议。
请求原理:
由于HTTP协议是基于TCP/IP的,因此客户端和服务端之间通信都是面向字节流通信机制
Http请求的构成
一个http请求过程通常由两个部分组成:
- 请求头(客户端请求到服务器时传输一些配置信息以及书资源)
- 响应头(服务端响应客户端时传递到客户端的状态信息)
请求头
请求头 | 是否必选 |
---|---|
请求体是否必选GET/POST [URL路径] HTTP/[HTTP版本] | 是 |
Host: [URL主机] | 是 |
User-Agent: [请求类型唯一标识] | 否 |
Accept: [设置服务器返回的数据类型] | 否 |
Accept-Language:[设置服务器返回的语言] | 否 |
Accept-Encoding: [设置服务器返回的压缩编码] | 否 |
Accept-Charset: [设置服务器返回的文字编码] | 否 |
\r\n\r\n | 是 |
Post内容 | 否 |
问:请求头中常见的请求方式有哪一些?
答:POST/GET/DELETE/PUT/HEAD
然后回到我们最初的问题:
get和post有什么最基本的区别?
区别一:
- get一般用于获取服务端数据的时候(获取)
- post一般用于大量数据提交的情况下,比如表单提交,文件上传等(提交)
区别二:
- get也可以用于数据提交,但是提交的内容是通过请求地址栏拼接,但是地址栏长度限制关系,get不能提交大量数据,最多不超过1024字节
- post提交的数据一般是在请求头封装,而不是直接在地址栏显示
区别三:
- get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段——对应,在URL中可以看到。
- post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
区别四:
- get方式,服务器端用Request.QueryString获取变量的值。
- post方式,服务器端用Request.Form获取提交的数据。
区别五:
- get传送的数据量较小,不能大于2KB。
- post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
区别六:
- get安全性比较低。
- post安全性比较高。
区别七:
- 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。幂等的意味着对同一URL的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。
- POST表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过POST请求实现,因为在注解提交之后站点已经不同了
区别八:
- 在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,,其中XX为该符号以16进制表示的ASCII(或ISOLatin-1)值。GET请求请提交的数据放置在HTTP请求协议头中。
- 而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
后话
get和post也是面试中的重点问题,细究还有很多,这里到此为止,以后继续补充
参考资料
https://zhinan.sogou.com/guide/detail/?id=316512367078