Новый протокол ~~~~~~~~~~~~~~~ Идея ----- Идеи для протокола взяты как из gopher'а, так и из HTTP. Концептуально он ближе ко второму, но средствами к первому. - структура сети представлена в виде графа, где - вершины это ресурсы сети - документы/файлы - ребра/дуги это ссылки, связывающие документы между собой - к ресурсу на сервере можно обратиться по некоторому идентификатору - к ресурсу можно обратиться разными режимами (применить некоторую операцию (глагол)) - получить атрибуты/метаданные о ресурсе - получить содержимое ресурса - получить связанные ссылки ресурса - ссылки, возможно, могут иметь атрибуты/тэги Реализация ----------- Самым простым вариантом реализации будет вариант, где режим обращения будет указан в запросе, как метод HTTP. Проблематичным будет необходимость отправки нескольких запросов для одного ресурса, хотя это можно решить возможностью опционального (когда в запросе содержится указание на нужные операции) или безусловного получения всей совокупности данных о ресурсе. Вариант 1 C: inf:/res/document S: ok size: 4096 type: text/plain ... C: get:/res/document S: ... C: ref:/res/document S: /res/document20 Reference 1 /res/document22 Reference 2 /res Documents index Вариант 2 C: /res/document S: ok size: 4096 type: text/plain refs: /res/document20 Reference 1 /res/document22 Reference 2 /res Documents index body: < .. /res/document contents .. > Вариант 3 C: /res/document inf+get S: ok size: 4096 type: text/plain body: < .. /res/document contents .. > Альтернативный вариант - stateful протокол, где клиент отправляет идентификатор ресурса и получает служебную информацию и список допустимых режимов доступа (подобно HTTP HEAD и OPTIONS). C: /res/document S: ok options: ref get size: 4096 type: text/plain C: ref S: /res/document20 Reference 1 /res/document22 Reference 2 /res Documents index C: bye Реализация иерархических структур ---------------------------------- При отображении иерархической структуры, вроде файловой системы, на такую модель возникает проблема - с одной стороны файлы не содержат никаких ссылок на другие файлы (возможно, только на каталог, в котором находятся), с другой каталог, как ресурс, содержит только ссылки и, возможно, метаданные.