Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 小程序是否使用浏览器进行HTTP请求?_Java_Caching_Browser_Applet_Urlconnection - Fatal编程技术网

Java 小程序是否使用浏览器进行HTTP请求?

Java 小程序是否使用浏览器进行HTTP请求?,java,caching,browser,applet,urlconnection,Java,Caching,Browser,Applet,Urlconnection,在发出HTTP请求时,小程序与其宿主浏览器之间是否存在任何交互,或者请求是否完全独立于本机浏览器代码 具体来说,在浏览器中运行的Java小程序是否有某种隐式方式来共享浏览器的会话状态和缓存 我读过一些非权威来源的帖子,其中说当小程序发出HTTP请求时,它将使用浏览器的缓存,并且它还可以(以某种方式)访问浏览器的cookie 我使用URLConnection进行的测试表明情况并非如此,我的直觉是,这听起来太方便了,不可能是真的。我假设JVM中没有任何东西知道JVM之外的世界,这意味着,如果JVM实

在发出HTTP请求时,小程序与其宿主浏览器之间是否存在任何交互,或者请求是否完全独立于本机浏览器代码

具体来说,在浏览器中运行的Java小程序是否有某种隐式方式来共享浏览器的会话状态和缓存

我读过一些非权威来源的帖子,其中说当小程序发出HTTP请求时,它将使用浏览器的缓存,并且它还可以(以某种方式)访问浏览器的cookie


我使用
URLConnection
进行的测试表明情况并非如此,我的直觉是,这听起来太方便了,不可能是真的。我假设JVM中没有任何东西知道JVM之外的世界,这意味着,如果JVM实现是特定于浏览器的,那么它对URL相关方法的实现将委托给本机浏览器代码,这是唯一可行的方法


如果cookie数据不是隐式共享或可用的,那么将
param
标记中的会话ID传递给小程序是最佳做法吗?这种方法是否存在安全问题?如果小程序不使用浏览器的缓存进行请求,那么在小程序中缓存请求是如何工作的?

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

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


至于cookies,我在过去见过一些Java插件没有传输会话cookies,特别是在macosx上(苹果甚至建议了一种解决方法)。但是大多数开发人员现在认为它们是被传输的,实际上通常是有效的。

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

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


有关更多信息,请参阅和。

我对Windows 7、Java 1.6.23、Firefox、Chrome和Internet Explorer的测试表明,小程序JVM中的
HttpURLConnection
s与浏览器不进行任何交互。它们不使用缓存,也不添加cookie头。

小程序可以与浏览器交互,通过JavaScript调用发出HTTP请求

如果您使用任何Java HTTP API,例如UrlConnection、Apache HTTPClient、Java.net.Socket,这些库将不会与浏览器交互。它们的行为就像在独立的JVM中一样。 缓存id取决于您使用的API,Apache HttpClient有一个缓存。URLConnection可以让您轻松地编写自己的缓存

您还不能直接访问JavaScript中的现有缓存,它的提交方式是

一旦呈现页面,param标记就不能更改,例如,OAuth标记需要定期刷新。 您可以通过JavaScript从浏览器获取cookie,并手动将它们添加到Java启动的HTTP请求中。此机制允许对其进行更新

分享一块饼干没有太多额外的风险。如果cookie上有HTTPOnly标志,则必须删除该标志

如果您允许浏览器中使用Java,那么您的用户几乎可以让您做任何事情。浏览器中的Java确实有一个沙盒,但令人担忧的是,它很容易被破解。如果你可以在没有Java的情况下设计应用程序,那么对用户来说,它们会更加安全


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

“我假设JVM中没有任何东西知道JVM之外的世界,这意味着,如果JVM实现是特定于浏览器的,那么它对URL相关方法的实现是否会委托给本机浏览器代码,这是唯一可行的方法?“-我认为你的假设是正确的。有关缓存相关的查询,请参阅在使用Firefox/IE9和
URLConnection
时,您是否希望将会话ID附加到HTTP请求?这在我的情况下不起作用。如果会话ID在cookie中,我会期望它。如果它在URL中,那么URL必须是完整的。如果对你不起作用,我不知道为什么。谢谢!我想你已经粘贴了两次相同的链接。很抱歉我现在已经解决了这个问题。我所做的经验测试不支持“使用浏览器发送请求”——请求是由JVM直接使用
HttpUrlConnection
confirm发出的——我最近向一个站点添加了Spring安全性,该站点包含一个访问站点上安全资源的小程序。小程序不再工作,因为它缺少cookie中的身份验证令牌。现在我将会话id作为小程序的参数传递,并在通过小程序向服务器发出任何请求时使用此会话id进行身份验证。经过一番研究,我读了你的建议,但我的问题是,使用这种方法是否存在安全风险?