专栏首页Coding迪斯尼java开发HTTP协议:HTTP协议的方法详解

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

如图所示,HTTP请求数据包第一行第一个单词具有重要意义:

第一行第一个单词是”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到服务器上。

接下来的几种方法比较少用但也值得我们掌握。第四种方法叫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.

本文分享自微信公众号 - Coding迪斯尼(gh_c9f933e7765d),作者:陈屹

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTTP协议原理及java实现:数据的基本传输模式

    zu说到基于TCP协议的上层协议,绝对绕不开的是HTTP协议,在其设计之初,设计者绝对想不到该协议具备的灵活性能够让其成为最广泛使用的TCP上层协议,在我看来H...

    望月从良
  • HTTP数据包头部格式解读1

    HTTP协议的大部分功能其实通过其协议包头来实现。因为HTTP协议包头作用如此重要,因此需要单独列出一节来详细讲解。协议包头大体上分为4类,分别为通用包头,请求...

    望月从良
  • Java实现HTTP:回应数据包头格式详解

    本节我们看看服务器返回给客户端的数据包头有什么特点。在HTTP1.1中有9种数据包头字段需要了解和掌握。第一个叫Accept-Ranges,他告诉客户端服务器是...

    望月从良
  • HTTP协议原理及java实现:数据的基本传输模式

    zu说到基于TCP协议的上层协议,绝对绕不开的是HTTP协议,在其设计之初,设计者绝对想不到该协议具备的灵活性能够让其成为最广泛使用的TCP上层协议,在我看来H...

    望月从良
  • python技术面试题(五)

    What the caterpillar calls the end, the rest of the world calls a butterfly

    小闫同学啊
  • 浏览器页面呈现过程

    首先浏览器将输入的链接进行DNS解析,也就是将域名转换为IP地址的过程,得到了服务器具体的IP地址,才可以进行TCP链接以及数据的传输。 具体DNS解析的过程...

    WindrunnerMax
  • 手游后台PVP系统网络同步方案总结

    来源:游迅网 发布者:wuyu 概述   PVP系统俨然成为现在新手游的上线标配,手游Pvp系统体验是否优秀,很大程度上决定了游戏的品质。从最近半年上线的新...

    编程范 源代码公司
  • 远程方法调用(RMI)原理与示例 转

      远程方法调用(RMI)顾名思义是一台机器上的程序调用另一台机器上的方法。这样可以大致知道RMI是用来干什么的,但是这种理解还不太确切。RMI是Java支撑分...

    wuweixiang
  • OAuth2.0授权协议

    通过用户授权,第三方服务访问用户存在其他服务上的资源,而不需用户将用户名密码直接传递的资源服务器的安全控制协议。

    sucl
  • [喵咪Redis]Redis-Sentinel

    [喵咪Redis]Redis-Sentinel ? 前言 redis-Sentinel 是我们这次来一同学习 redis 的重点,在我们现在的系统已经离不开 r...

    喵了个咪233

扫码关注云+社区

领取腾讯云代金券