http的的请求方式---总结

http的八种请求方式:

https://blog.csdn.net/sanbingyutuoniao123/article/details/51491586
https://blog.csdn.net/qq_36183935/article/details/80570062
参考文章:
感谢前辈分享
https://www.cnblogs.com/logsharing/p/8448446.html(POST和GET不同)
这里发送几个包存在一定的争议性
https://blog.csdn.net/zerooffdate/article/details/81513717

http/1.1中总共定义了请求方法,其中包括:
按照不常用的方式排序:
OPTIONS:返回服务器针对特定资源所支持的http请求方法,也可以向web服务器发送“*”来测试 服务器的功能性(不包含实体)
CONNECT:HTTP/1.1中预留给能够将链接改为管道方式的代理服务器(不包含实体)
TRANCE:对可能经过代理服务器传送到服务器上的报文将进行跟踪(不包含实体)
DELETE:请求服务器输出Request-url所标识的资源(不包含实体)
PUT:向指定的资源上传其最新的内容(包含实体)
POST:向指定的资源提交数据进行处理请求(例如提交表单或者是上传文件)。POST请求可能会导致新的资源创建或者是已有资源的修改。(包含实体)
HEAD:向服务器索要与GET请求相一致的响应,只响应首部,响应体不会被返回。HEAD 方法与GET 方法的行为很类似,但服务器在 响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
使用HEAD,可以:在不获取资源的情况下了解资源的情况(比如,判断其类型),通过查看响应中的状态码,看看某个对象是否存在,通过查看首部,测试资源是否被修改了。(不包含实体)
GET:向特定的资源发送请求(不包含实体)

其中GET和POST的区别有哪些?

1.地址栏中的不同:
GET请求,请求的数据会附在url之后,将是将数据放置在http协议中的中,并且以?分割url和传输数据,多个参数 用&链接;
例如:login.action?name=lll&password=udaf&verfy=E4%BD%A0 %E5%A5%BD
如果是英文字母或者是数字将会进行原样发送,如果是空格转换为+,如果是中文或者是其他字符,直接使用BASE64进行加密,其中%XX中的XX为该符号以16进制表示的ASCII。
POST请求,将提交的数据放置在http包中的中
总结GET提交的数据将会在地址栏中显示 出来,而POST提交的数据地址栏中不会改变
2.传输数据的大小
http协议没有对传输的数据大小进行限制,http协议规范也没有对URL长度进行限制,而实际开发中存在的限制不同:
GET:特定的浏览器和服务器中对URL的长度有限制,IE对URL长度的限制是2083字(2K+35),因此GET请求传输数据会受到URL长度的限制
POST:由于不是通过url传值,理论上数据不受限制,但是实际各个服务器会规定对post提交数据的大小进行限制。
3.安全性不同
因为通过GET提交的数据和用户名密码等敏感信息的出现在URL上,并且请求的可能被浏览器缓存,而POST不会。
4.支持的数据类型不同
GET对参数的数据类型只接受ASCLL字符,而POST没有区别

OK,上面的只是我们看到的表面上的内容,下面来讲一下本质吧:
GET,POST是两种jhttp协议中发送请求的方法
http是基于tcp/ip的关于数据如何在万维网中通信的协议
http底层是TCP/IP,所以GET/POST的底层也是TCP/IP,就是说GET/POST都是 tcp链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。总之一句话,http是行为准则,规定了GET/POST参数的传送渠道,是url还是requestbody,回答了GET/POST请求地址栏不同的原因,而TCP才是GET和POST怎么实现的基本。
在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。这就是为什么GET请求url有限制的原因。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
还有重要的一点
5.产生的数据包不一样
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器将会把http header 和data一起发送出去,服务器响应200(返回数据)
POST请求,浏览器先发送header,服务器响应100之后continnue,浏览器再发送data,服务器响应200 OK(返回数据)

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么
1.GET与POST都有自己的语义,不能随便混用。
2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值