Подтвердить что ты не робот

Используют ли апплеты браузер для запросов HTTP?

Есть ли какое-либо взаимодействие между апплетами и браузером хостинга при выполнении HTTP-запросов или запросы полностью сделаны независимо от собственного кода браузера?

В частности, могут ли Java-апплеты, запущенные в браузере, использовать неявный способ совместного использования состояния сеанса браузера и кеша?

Я прочитал несколько сообщений из авторитетных источников, говорящих, что когда апплет делает HTTP-запрос, что он будет использовать кеш браузера, и что он также будет иметь доступ (как-то) к куки файлам браузера.

Тесты, которые я сделал с помощью URLConnection, предполагают, что это не так, и мое чувство кишки заключается в том, что звучит слишком удобно, чтобы быть правдой. Я бы предположил, что ничто в JVM ничего не знает о мире за пределами этой JVM, а это означает, что единственный способ, которым это могло бы работать, было бы, если реализация JVM специфична для браузера, его реализация методов, связанных с URL-интерфейсом, передается в собственный код браузера

Если данные cookie не являются неявно разделяемыми или доступными, лучше всего передать идентификатор сеанса в теге param в апплет? Существуют ли проблемы безопасности при таком подходе? Если апплет не использует кеш браузера для запросов, как работают кеширование запросов в апплете?

4b9b3361

Ответ 1

Мое тестирование с Windows 7, Java 1.6.23 и Firefox, Chrome и Internet Explorer заключается в том, что HttpURLConnection из JVM апплета никак не взаимодействует с браузером. Они не используют кеш и не добавляют заголовки файлов cookie.

Ответ 2

Апплеты выполняются плагином Java, который является плагином для браузера. Апплет действительно является частью HTML-страницы, загруженной браузером, может связываться с DOM браузера и с кодом JavaScript на странице и использует браузер для отправки запросов на его исходный сервер.

См. http://docs.oracle.com/javase/tutorial/deployment/applet/appletExecutionEnv.html и http://docs.oracle.com/javase/tutorial/deployment/applet/server.html для Дополнительная информация.

Ответ 3

Я думаю, что это зависит от плагина Java. Мой опыт в том, что обычно он использует кеш браузера для сетевых подключений и обычно передает куки. Я должен был очистить кеш браузера раньше, чтобы получить новый файл в апплете.

Если вы посмотрите на панель управления плагином Oracle Java 7, вы увидите параметр в сетевых параметрах для использования прямых подключений для апплетов, но по умолчанию используется "параметры браузера".

Что касается файлов cookie, в прошлом я видел некоторые плагины Java, которые не передавали файлы cookie сеанса, в частности, на MacOS X (Apple даже предложила обходное решение). Но большинство разработчиков теперь предполагают, что они передаются, и на практике это обычно работает.

Ответ 4

Апплеты не делят информацию о сеансе по умолчанию, но при инициализации вы можете передать идентификатор сеанса через параметр Applet. И используйте идентификатор сеанса для каждого HTTP-запроса.

Ответ 5

Апплеты могут взаимодействовать с браузером для выполнения HTTP-запросов через вызовы JavaScript.

Если вы используете какие-либо API Java HTTP, например UrlConnection, Apache HTTPClient, java.net.Socket, эти библиотеки не будут взаимодействовать с браузером. Они ведут себя так, как будто они находятся в автономной JVM. Идентификатор кэширования зависит от используемого вами API. Apache HttpClient имеет кеш. URLConnection позволяет вам написать свой собственный кеш достаточно легко.

Вы не можете напрямую получить доступ к существующему кешу в JavaScript, пока он не появится. https://developer.mozilla.org/en-US/docs/Web/API/CacheStorage.

Тег param не может быть изменен после отображения страницы, например, токены OAuth требуют периодического обновления. Вы можете получить куки из браузера через JavaScript и вручную добавить их в инициируемый Java запрос HTTP. Этот механизм позволяет им обновляться.

Существует не так много риска для совместного использования куки. Вы должны будете удалить флаг HTTPOnly в куки, если он есть.

Если вы разрешаете Java в браузере, ваши пользователи позволяют вам делать что угодно. У Java внутри браузера есть песочница, но ее беспокоят легко вырваться. Если вы можете разрабатывать приложения без Java, они будут намного более безопасными для пользователей.

С точки зрения человека, пишущего апплет, Java безопасна и намного более гибка, чем JavaScript в браузере.