Http协议中Get和Post的浅谈

简介:

起名困难户,每次写文章最愁的就是不知道该如何起个稍具内涵的名字,如果这篇文章我只是写写Get和Post的区别,我可以起个名字“Get和Post的那点事”,如果打算阐述一下Http协议原理性内容,那该叫“Http中你不知道的那些事”,两者都不是我想要的,前者太过浅薄,后者太过深奥,已超出本人的能力范围,于是我只能写点Http,Get,Post和个稀泥大家就将就着看一下,开头很多废话的毛病我发现我是越来越难改了,进入正题吧~

Http

HTTP(Hypertext transfer protocol),先说下着几个单词,Hypertext是超文本(除了HTML外,也可以是带有超链接的XML或JSON),protocol是协议,transfer翻译应该是移交(也可以翻译成传输,运输,还有一个更具体的词是transport),最开始学校学习Http的所有市面能见到的书籍都翻译成超文本传输协议,Http设计的本身是为了移交和操作资源,并不是为了传输资源.最开始的的网站都是静态内容类似今天云盘,实现了资源共享,URL(Uniform Resoure Locator:统一资源定位符)用来映射网上的资源,为了大家能统一的访问web资源,Http提供了几种方法访问资源.

Http协议中定义了与服务器之间交互的八个方法:get(获取资源),post(向指定资源提交数据进行处理请求,增加或者更新资源),put(向指定资源位置上传其最新内容 ),delete(请求服务器删除Request-URI所标识的资源);

head(主机端响应Client端的一些数据文件头),options(主机端响应Client端的一些允许的功能与方法。返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性),trace(回显服务器收到的请求,主要用于测试或诊断),connect(HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器)。以前出去面试的时候只知道有get和post请求,对于其他一概不知,现在想来有点惭愧。

Get和Post的基础概念

HTTP协议本身是一种面向资源的应用层协议,但对HTTP协议的使用实际上存在着两种不同的方式:一种是RESTful的,它把HTTP当成应用层协议,比较忠实地遵守了HTTP协议的各种规定;另一种是SOA的,它并没有完全把HTTP当成应用层协议,而是把HTTP协议作为了传输层协议,然后在HTTP之上建立了自己的应用层协议。

说到这里不得不说到一个大神级的人Roy Thomas Fielding,维基上有详细英文介绍,我说下中文介绍,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。基于以上的工作经历他写了一个篇让人惊叹的博士论文Architectural Styles and the Design of Network-based Software Architectures,中文名叫架构风格与基于网络应用软件的架构设计(下载链接:http://pan.baidu.com/s/1bnGQUsv).

论文中提出了一个REST(REpresentational State Transfer即表现层状态转移)架构。对应的就是上面的RESTFUL的使用方式,项目中没有用到过,看过一点一点皮毛,园友有兴趣的可以自己研究一下~Get和Post这两哥们用的太广泛了,而且面试的时候基本上跟递归一样是打开共同话题的谈资,还是看概念吧~

1.按照最开始Http协议的设计,,GET用于获取资源,而且应该是安全的和幂等的。

安全和幂等属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它。按照规范讲get只用于获取服务器资源,但是你用get执行了其他操作,虽然违反了规范,也不会有影响。幂等属于数学中的概念,简单说下吧:

一元运算时,其作用在任一元素两次后会和其作用一次的结果相同。例如,a的绝对值的绝对值等于a,abs(a)=abs(abs(a))。
二元运算时,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1,0*0=0。
 2.按照最开始Http协议的设计,post用于增加资源或者更新资源。 

Get和Post异同点

异同点网上随便找找,满大街都是,既然要写了,我还是免不了俗,尽量按照自己理解的方式去比较:

1.可见性,get访问时URL是所有人都可见的,post则是不可见的.

2.长度限制,get和post传递长度都是是没有限制的(不知道是自己当时没学好还是老师误人子弟说get是有长度限制的,很长一段时间以为get请求长度为1kb),get是放在URL一起去请求的,浏览器限制了URL的长度,导致get传递的参数不能太长.URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。只是浏览器上有限制,不同浏览器限制不一样,IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。Safari中url最大长度限制为 80,000个字符。OperaURL最大长度限制为190,000个字符。Chrome对url长度限制为8182个字符。

POST是请求大小是没有限制的,Web服务器会对post请求进行控制,以IIS7为例

在如下路径C:\Windows\System32\inetsrv\config\schema找到IIS_schema.xml,在其中搜索一下 name="requestLimits",就会看到三个配置。

<attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" /> 
<attribute name="maxUrl" type="uint" defaultValue="4096" />
<attribute name="maxQueryString" type="uint" defaultValue="2048" />

postIIS请求限制为最多为28.6M,get请求IIS限制为2KB,如有需要可根据需求修改长度大小.

3.安全性,与 post相比,get的安全性较差,因为所发送的数据是 URL 的一部分(登录的时候提交数据应该没人会用get),post比get更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

4.数据类型,get只允许 ASCII 字符,post传递没有限制,也允许二进制数据。

5.编码类型,form的enctype属性为表单控件的内容编码方式,常用有两种:application/x-www-form-urlencoded(默认)和multipart/form-data,不管get还是post都可以使用这两种编码方式, 当表单中含有type=file文件控件的时候发送方式只能使用post,内容编码方式只能使用multipart/form-data.

6.书签,缓存get请求可以收藏为书签,能被缓存,post不可以被收藏为书签,不可以被缓存.

7.取值方式ASP.NET中对get请求使用Request.QueryString取值,对Post请求使用Request.Form取值,如果偷懒的话直接用Request两者通用,JSP对get请求使用request.QueryString("");取值,对Post请求使用request.getParameter("");取值,你也可以直接用request.getParameter("")获取get请求中的数据.在PHP中,可以用GETGET和_POST分别获取GET和POST中的数据,而$_REQUEST则可以获取GET和POST两种请求中的数据。

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/3886020.html,如需转载请自行联系原作者

相关文章
|
7天前
|
缓存 网络协议
【计算机协议】第一章——HTTP协议详解
【计算机协议】第一章——HTTP协议详解
|
9天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
9天前
|
安全 网络安全 开发工具
对象存储oss使用问题之flutter使用http库进行post请求文件上传返回400如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
32 1
|
11天前
|
缓存 安全 网络协议
Http协议是什么
【4月更文挑战第12天】HTTP是用于从WWW服务器传输超文本到浏览器的协议,基于TCP/IP,特点包括无连接、无状态、面向对象、无阻塞和可缓存。它的工作原理是客户端发送请求,服务器处理后返回响应。自1989年创建以来,HTTP已发展支持多媒体内容传输,并通过HTTPS提供安全保护。学习更多可参考计算机网络技术文献。
18 6
|
13天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
25 0
|
22天前
|
Go
go语言的http post推送
go语言的http post推送
10 1
|
23天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
37 1
|
16天前
|
Java
java原生发送http请求
java原生发送http请求
|
24天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
53 1
|
1月前
|
编解码 测试技术 索引
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。
72 1
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本