Проще говоря (и, как вы, наверное, хорошо знаете), и, если использовать давнюю терминологию, существует два аспекта (скажем, веб): клиент и сервер:
Любой язык, который может работать без
вызов к веб-серверу в клиенте
(то есть веб-браузер)
на стороне клиента (Javascript - это
очевидный пример);
язык, который работает на сервере,
но выдает контент, который клиент
может запросить, на стороне сервера (Ruby,
Python, Perl и др.)
Плагины типа Flash или Silverlight - это отдельный случай. Несмотря на то, что они написаны на языках, функционирующих на более низком уровне, чем сценарии на стороне клиента, они, тем не менее, работают в клиентском браузере с плагином и - после загрузки - ActionScript (скажем) будет работать в браузере, клиенте -side.
Чтобы усложнить ситуацию, HTML и Javascript могут использоваться для написания (например, виджетов OS X и плагинов браузера) и - хотя они могут вызывать функции сервера для (скажем) данных - они все еще на стороне клиента .
Более того, способность HTML5 хранить данные и рост числа решений NoSQL означают, что разделение уже не такое четкое, как когда-то.