java开发HTTP协议:HTTP协议的方法详解

如图所示,HTTP请求数据包第一行第一个单词具有重要意义:
屏幕快照 2020-05-05 上午10.26.35.png
第一行第一个单词是"GET",客户端会根据对服务器的请求来指定该单词,因此第一行第一个单词被称为HTTP协议的方法。客户端发送给服务器的请求数据包,第一个单词永远作为该请求的“方法”。通常情况下,客户端通知服务器采取某种操作并将操作的结果返回给它都被称为命令,只有在HTTP协议下被称为方法,因此HTTP协议的方法与其他协议所说的命令并没有本质区别。之所以使用“方法”是因为HTTP协议为了实现其通用性和灵活性,借鉴了面向对象编程的思维。有编程经验的朋友都知道,某个类导出的接口称为该类的方法,HTTP协议把数据包看做一个类的实例,因此实例里面封装了各种属性,也就是前面章节描述的header,该实例发送给服务器后导致给定的方法或接口被调用,因此HTTP借用面向对象编程的思维来设计其数据包,这也是HTTP协议为何如此通用和灵活的重要原因。

所有方法对应的单词都必须大写,在HTTP协议中主要有三种方法。第一种就是现在看到的GET,它要求服务器将URI指定的资源返回给客户端,URI就是跟在方法对应单词后面的字符串,以上面图片为例就是"/pingjs/ext2020/…"这一句。GET方法在HTTP协议中使用最为广泛,在我们通过浏览器打开特定网页时,浏览器作为客户端向服务器发送GET方法数据包从而获得对应网页的HTML数据。

当服务器接收到GET数据包后,它检测对应URI是否有效,有效的话就根据URI的指引将数据返回给客户端。需要注意的是服务器对GET请求的执行受到header部分信息的影响,如果header部分包含例如If-Modified-Sinced,If-Match等字段,那么服务器就会检验当前条件是否满足字段的要求以便决定是否将数据返回给客户端。这种受到header自动影响的GET请求也称为条件化GET请求。如果请求的文件很大,那么客户端会在GET请求中包含一个Range字段用于告诉客户端返回文件指定部分。

第二个常用方法叫HEAD,它与GET类似,但是要求服务器不要返回请求文件的所有数据而是把文件头部数据返回即可。客户端使用该方法目的往往不在于获取文件数据,而在于确认文件是否存在,或是确认文件的状态,大小等相关信息。

第三种常用方法叫POST,它的作用是让客户端将数据提交给服务器。我们往往会通过网页填写表格,例如在登陆时填写用户名和密码,或者通过网页登记个人信息时,你会在网页上填写姓名,性别等相关数据,填写完后你点击“登陆”或是“提交”,那么相关信息就会给浏览器以POST的方法提交给服务器进行认证或存储,例如像下面表格的信息,当在方框中填写完点击“登陆”后,所填写的信息就会被POST到服务器上。

屏幕快照 2020-05-05 上午10.55.10.png

接下来的几种方法比较少用但也值得我们掌握。第四种方法叫OPTIONS,它被客户端用来向服务器询问对方所支持的沟通方式。如果在OPTIONS方法后面跟着一个URI,那么客户端的目的不是请求服务器返回指定文件而是像服务器询问获取文件信息的途径,此时服务器有可能返回一个新的主机IP让客户端去重新请求,如果后面跟着“*”符号,这意味着客户端在向服务器查询服务器当前的相关信息,服务器会返回详细信息告诉客户端如何获取存储在服务器上的资源。

第五种方法叫PUT。这个方法与POST很像,它也是客户端用于向服务器传递信息,两者的区别在于POST会要求服务器的特定程序来处理提交的信息,例如POST数据包中常常指定存储在服务器上的一个php文件,当数据抵达服务器后,服务器会执行指定的php文件中的代码,然后将受到的信息交给php代码去做处理,而PUT则要求服务器直接将接收的数据存储在指定位置,我们也可以认为PUT与GET相对应,GET是获取服务器的指定文件,PUT是将文件提交给服务器。通常情况下,允许客户端直接将文件存储在服务器上会造成严重的安全隐患,因此PUT方法很少使用,更多的是使用POST方法,因为这样服务器能运行特定程序对客户端提交的信息进行审查从而防止恶意信息被传递到服务器上。

第六种方法叫DELETE,它对应客户端要求服务器删除指定文件,由于该方法涉及到服务器系统的安全,因此很少被允许使用。第七种方法叫TRACE,它允许客户端返回客户端以前发给服务器的请求信息,该方法通常用于服务器的调试。除了这几种主要方法外,HTTP1.1还保留了CONNECT方法用于以后使用。

我们可以看到客户端使用的方法会对服务器的安全产生重要影响。因此所有方法可以分为两大类,第一类叫“安全”方法,这种请求使得服务器的管理员不会感觉服务器的运行受到威胁,这类方法对应GET, OPTIONS, TRACE,第二种叫“危险”方法,任何让客户端将数据提交给服务器的方法都属于此类,也就是POST,PUT,DELETE.

下一节我们将使用java开发本节提到的若干HTTP方法。

更详细的讲解和代码调试演示过程,请点击链接

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值