Applet jar是由浏览器还是由JVM下载的?

| 假设我下面有简单的小程序。我想知道http请求获取jar的是浏览器还是jvm。如果是jvm制作的,浏览器的cookie和会话是否会发送到服务器?
<APPLET 
  CODE=\"FieldTestF.class\"
  WIDTH=\"100%\" HEIGHT=\"90\"
  ARCHIVE = \"FieldTestF.jar\"
  >
This example uses an applet.
</APPLET>
    
已邀请:
        小应用程序JAR由JVM下载。所有小程序都与URLClassloader实例(或子类-Sun JVM中的“ 1”)相关联,该实例负责加载小程序所需的所有类和资源。 显然,加载类文件和资源所需的大多数基础结构都可以在Java运行时中使用,并且重复使用相同的基础结构将使Java插件不必担心大部分时间会访问浏览器内部。 我将在此处复制执行此活动的OpenJDK代码库的重要部分。您会在
sun.applet.AppletPanel
runLoader()
方法中找到有趣的东西:
/**
 * Load the applet into memory.
 * Runs in a seperate (and interruptible) thread from the rest of the
 * applet event processing so that it can be gracefully interrupted from
 * things like HotJava.
 */
private void runLoader() {
    if (status != APPLET_DISPOSE) {
        showAppletStatus(\"notdisposed\");
        return;
    }

    dispatchAppletEvent(APPLET_LOADING, null);

    // REMIND -- might be cool to visually indicate loading here --
    // maybe do animation?
    status = APPLET_LOAD;

    // Create a class loader
    loader = getClassLoader(getCodeBase(), getClassLoaderCacheKey());

    // Load the archives if present.
    // REMIND - this probably should be done in a separate thread,
    // or at least the additional archives (epll).

    String code = getCode();

    // setup applet AppContext
    // this must be called before loadJarFiles
    setupAppletAppContext();

    try {
        loadJarFiles(loader); // <-- this is what loads the JAR files
        applet = createApplet(loader);
        ...
同样,让浏览器获取资源将使Java安全模型的事情变得复杂。部分原因是小应用程序使用自己设置的“ 5”。初始化applet时,此上下文具有默认权限集。该集合包括“ 6”以连接到托管代码库的服务器,或“ 7”允许对包含代码库的文件系统进行读取访问。如果要由浏览器完成资源加载,则根据插件的实现方式,可能根本不执行检查,从而可能导致安全模型崩溃。 您可以通过查看网络流量来确认JVM的资源加载行为,如其他答案所示。我将张贴Fiddler的屏幕截图作为确认。进程列指示哪个OS进程负责发出请求(在这种情况下,恰好是Java应用程序启动器
java.exe
)。抱歉,图片质量很差-您需要调整图片大小或在新窗口中打开图片。     
        我想我可以看一下,但是嗅探浏览器和服务器之间的连接以找到答案似乎更加有趣。 事实证明,请求是由JVM完成的。这是可以观察到的,因为: 用户代理是
Mozilla/4.0 ([OS here]) Java/[Java version here]
,而不是您的浏览器发送的任何内容; applet文件请求并非源自浏览器请求所来自的端口; 浏览器未在请求日志和开发人员工具中确认请求。 但是,浏览器发出HTTP请求时似乎会将cookie传递给JVM,这意味着您的会话数据应该可用。     

要回复问题请先登录注册