跳转到内容

Sun 认证 Web 组件开发人员/第 1 节/HTTP 方法

来自 Wikibooks,开放的书籍,开放的世界

HTTP 是一种简单但功能强大的协议,创建于 1990 年代初期,用于传输文本(最初是 ASCII,然后是 HTML)。它的运作非常简单,这解释了它为何传播如此之快。它背后的理念是,服务器上有一个资源,而客户端想要对其进行操作。对于每种可能的动作,协议中都存在一种方法。协议中可用的方法是用于基本 CRUD 操作的方法,再加上一些其他客户端 - 服务器和代理服务器通信方法。

HTTP 方法和 JEE

[编辑 | 编辑源代码]

在 JEE 规范中,Web 容器处理协议细节,并且当使用 HTTP 作为通信协议(大多数情况下)时,容器会将请求重定向到扩展 HTTPServlet 的类。HTTPServlet 类是 HTTP 方法的无操作处理程序。对于每个协议方法,除了 Connect 之外,HTTPServlet 类中都有一个等效的方法。例如,对于 Get 方法,类中存在 doGet 方法。

它们都接收两个参数:HTTPServletRequest 和 HTTPServletResponse。通过这两个接口,可以访问与客户端一起创建的输入流以及请求来自哪里,还可以访问输出流,答案将写入其中。实际上,这就是 servlet 通常向 HTML 客户端发送响应的方式,尽管这不是最推荐的方式。

HTTPServletRequest 还提供对许多其他功能的访问,例如 会话管理、请求参数以及在 HTTP 请求 中描述的许多其他功能。

HTTP 响应 还具有许多其他功能,主要与将响应分派到正确的位置相关。

HTTP 方法和考试

[编辑 | 编辑源代码]

对于 SCWCD 考试,没有必要深入了解每种方法,只需了解两种方法,因为它们是日常工作中使用最广泛的两种方法:GETPOST。有关每种方法的完整方法列表和描述,可以在 HTTP 协议 的维基百科页面上找到,建议您阅读该页面并了解协议的基础知识,然后再继续。

POST 和 GET

[编辑 | 编辑源代码]

这两种方法是最简单的,并且大多数情况下,客户端需要的只是从服务器 获取 东西。有时事情会变得更加复杂,用户需要在服务器上更改一些东西,这就是 Post 为我们提供的帮助。该协议就是考虑到这一点而构建的,用户可以从服务器 获取 东西并在那里 发布 东西。

这两种方法之间的主要区别是 POST 有一个主体,而 GET 没有。可以使用此主体将数据从客户端发送到服务器以更改某些内容。可以在此主体中发送任意数量的数据。

GET 也可以将数据发送到服务器,但方式不同。一个 URL 可以有一个 查询 部分。此查询是 get 可以将数据发送到服务器的位置。问号 (?) 用于将资源与 URL 的查询部分隔开。POST 也可以这样做,数据可以在 POST 请求中的主体和 URL 中同时发送。

在 URL 中发送数据有两个缺点

  1. 第一个缺点是,可以发送的数据量有限,并且在大多数浏览器中,限制为 256 个字符 - 这很多,但如果要发送一个大型表单,数据可能会被遗漏
  2. 第二个缺点是保密性,因为当您在 URL 中发送数据时,任何可以查看浏览器或被请求的 URL 的人都会看到它,并且用户可能希望将其添加为书签,并且数据将与它一起保存,如果正在发送信用卡号或任何其他机密数据,这是不好的

这两种方法之间的另一个区别是,正如协议所设计的那样,POST - 理论上 - 不是 幂等的。这意味着如果您执行相同的请求两次,结果可能会有所不同。请注意,在上一句话中添加了“理论上”,因为可以设计一个应用程序,使其 GET 方法更改服务器中的某些内容,因此,每次请求都会导致不同的答案。协议的设计使 GET 幂等的,而 POST 不是,但它们的实现方式由开发人员决定。

另一个需要注意的重要事项是,用户不喜欢等待,因此他们会在发送第一个请求后(当然)多次点击按钮。应用程序应该保证的事情之一是,在 Web 应用程序中两次付款之类的操作不会发生。通常,遵循上一段中描述的基本规则会有所帮助。同步重要请求 - 例如为产品付款 - 可以是解决此棘手问题的办法之一。

华夏公益教科书