Applet是否使用浏览器进行HTTP请求?

时间:2012-06-20 07:40:38

标签: java caching browser applet urlconnection

在发出HTTP请求时,applet与其托管浏览器之间是否存在任何交互,或者请求是否完全独立于本机浏览器代码?

具体来说,在浏览器中运行的Java applet是否有一些隐含的方式来共享浏览器的会话状态和缓存?

我已经阅读了一些来自非权威人士的帖子,说当applet发出HTTP请求时会使用浏览器的缓存,并且它也可以访问浏览器的cookie(<某种方式)。

我使用URLConnection进行的测试表明情况并非如此,而我的直觉是,这听起来太方便了。我假设JVM中的任何内容都不知道JVM之外的世界,这意味着唯一可行的方法是,如果JVM实现特定于浏览器,则其URL相关方法的实现委托给本机浏览器代码?

如果未隐式共享或提供Cookie数据,最佳做法是将param标记中的会话ID传递给applet吗?这种方法是否存在安全问题?如果applet没有使用浏览器的缓存来处理请求,那么如何缓存applet中的请求呢?

5 个答案:

答案 0 :(得分:5)

Applet由Java插件执行,Java插件是一个浏览器插件。 applet确实是浏览器加载的HTML页面的一部分,可以与浏览器DOM和页面中的JavaScript代码进行通信,并使用浏览器向其原始服务器发送请求。

有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/deployment/applet/appletExecutionEnv.htmlhttp://docs.oracle.com/javase/tutorial/deployment/applet/server.html

答案 1 :(得分:5)

我使用Windows 7,Java 1.6.23和Firefox,Chrome和Internet Explorer进行的测试是,applet的JVM 中的HttpURLConnection与浏览器无法进行交互。他们使用缓存,添加了Cookie标头。

答案 2 :(得分:2)

我认为这取决于Java插件。我的经验是,通常它使用浏览器缓存进行网络连接,通常它会传输cookie。我必须先清空浏览器缓存才能在applet中获取新文件。

如果查看Oracle Java 7插件控制面板,您将在网络参数中看到一个选项,可以使用applet的直接连接,但默认情况下使用“浏览器参数”。

至于cookies,我在过去看到过一些没有传输会话cookie的Java插件,特别是在MacOS X上(Apple甚至提出了一种解决方法)。但是大多数开发人员现在都认为它们是传输的,并且在实践中它通常可以工作。

答案 3 :(得分:1)

默认情况下,小程序不共享会话信息,但您可以在初始化时通过Applet参数传递会话ID。并为每个HTTP请求使用会话ID。

答案 4 :(得分:0)

Applet可以与浏览器进行交互,以通过JavaScript调用发出HTTP请求。

如果您使用任何Java HTTP API,例如UrlConnection,Apache HTTPClient,java.net.Socket这些库将不会与浏览器进行交互。它们的行为就像在独立的JVM中一样。 在您使用的API上缓存ID依赖,Apache HttpClient有一个缓存。 URLConnection使您足够容易地编写自己的缓存。

您不能直接使用在JavaScript中现有的缓存,但它的寿正在添加。 Cross Validated

页面渲染后,param标签就无法更改,例如OAuth令牌需要定期刷新。 您可以通过JavaScript从浏览器中获取Cookie,并将其手动添加到Java启动的HTTP请求中。这种机制允许它们被更新。

没有太多额外的风险共享的cookie。你将不得不删除该Cookie中HTTPOnly标志,如果存在的话。

如果您在浏览器中允许Java,则您的用户可以执行几乎所有操作。 Java的浏览器里面确实有一个沙箱,但其令人担忧的是容易摆脱。如果你能设计的应用程序不带Java,他们将成为用户安全得多。

从编写Applet的人的角度来看,Java比浏览器中的JavaScript安全且灵活得多。