Коды ответа HTTP
Код ответа (состояния) HTTP показывает, был ли успешно выполнен определённый HTTP запрос. Коды сгруппированы в 5 классов:
- Информационные 100 — 199
- Успешные 200 — 299
- Перенаправления 300 — 399
- Клиентские ошибки 400 — 499
- Серверные ошибки 500 — 599
Коды состояния определены в 10-ой секции RFC 2616. Обновленную спецификацию можно найти в RFC 7231 .
Если вы получили код ответа (состояния), которого нет в данном списке, в таком случае он является не стандартизированным кодом ответа (состояния), вероятней всего он кастомный сервера.
Следующая таблица содержит список всех кодов и их значения:
- GET: «ПОЛУЧИТЬ». Запрошенный ресурс был найден и передан в теле ответа.
- HEAD: «ЗАГОЛОВОК». Заголовки переданы в ответе.
- POST: «ПОСЫЛКА». Ресурс, описывающий результат действия сервера на запрос, передан в теле ответа.
- TRACE: «ОТСЛЕЖИВАТЬ». Тело ответа содержит тело запроса полученного сервером.
«Множественный выбор». Этот код ответа присылается, когда запрос имеет более чем один из возможных ответов. И User-agent или пользователь должен выбрать один из ответов. Не существует стандартизированного способа выбора одного из полученных ответов.
«Перемещён на постоянной основе». Этот код ответа значит, что URI запрашиваемого ресурса был изменён. Возможно, новый URI будет предоставлен в ответе.
«Найдено». Этот код ответа значит, что запрошенный ресурс временно изменён. Новые изменения в URI могут быть доступны в будущем. Таким образом, этот URI, должен быть использован клиентом в будущих запросах.
«Перенаправление на постоянной основе». Это означает, что ресурс теперь постоянно находится в другом URI, указанном в заголовке Location: HTTP Response. Данный код ответа имеет ту же семантику, что и код ответа 301 Moved Permanently , за исключением того, что агент пользователя не должен изменять используемый метод HTTP: если POST использовался в первом запросе, POST должен использоваться и во втором запросе.
Примечание: Это экспериментальный код ответа, Спецификация которого в настоящее время находится в черновом виде.
Этот ответ отсылается, когда веб сервер после выполнения server-driven content negotiation, не нашёл контента, отвечающего критериям, полученным из user agent.
Этот ответ отсылается, когда запрос конфликтует с текущим состоянием сервера.
Этот ответ отсылается, когда запрашиваемый контент удалён с сервера.
Запрос отклонён, потому что сервер требует указание заголовка Content-Length , но он не указан.
Размер запроса превышает лимит, объявленный сервером. Сервер может закрыть соединение, вернув заголовок Retry-After
Found a content problem with this page?
This page was last modified on 29 янв. 2023 г. by MDN contributors.
Your blueprint for a better internet.
Презентация, доклад Инструкция по запуску дистанционных курсов
Вы можете изучить и скачать доклад-презентацию на тему Инструкция по запуску дистанционных курсов. Презентация на заданную тему содержит 15 слайдов. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас — поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций в закладки!
Введение Уважаемые пользователи, Вашему вниманию представлена подробная инструкция по входу на портал СДО и запуску дистанционных курсов. Инструкция состоит из 2 разделов: Раздел 1. Инструкция для сотрудников, не имеющих учетной записи и корпоративной почты (слайд 4) Раздел 2. Инструкция для сотрудников, имеющих учетную запись и корпоративную почту (слайд 11) Настоятельно рекомендуем перед началом дистанционного обучения ознакомиться с соответствующим разделом.
Wt, библиотека C++ для разработки веб-приложений
Так случилось, что на Хабре не было ни одного упоминания Wt, C++ Web Toolkit, кроме одного комментария.
Библиотека Wt может заинтересовать тех, кто пишет на C++ и захотел посмотреть в сторону Web, но не хочет изучать и/или использовать HTML, CSS, JavaScript, SQL и дополнительные технологии, связанные с веб-разработкой и работой с БД. В данной статье моей целью было обратить внимание сообщества на Wt, а не освещать все его возможности.
Если Вы жаждете посмотреть, как это работает, вот пример, демонстрирующий различные виджеты: www.webtoolkit.eu/widgets
Обзор возможностей библиотеки на русском языке: www.webtoolkit.eu/wt/ru/features
Возможности Wt
Здесь я приведу некоторые из особенностей, которые мне кажутся наиболее привлекательными.
Wt является кроссплатформенной свободной поддерживаемой C++ библиотекой. Релизы выходят несколько раз в год. Доступна на условиях лицензии GNU GPL 2 или коммерческой лицензии. Напомню, что лицензия GNU GPL 2 не запрещает создавать приложение с закрытым кодом, чтобы пользоваться им лично, в частности для разворачивания на своем сервере.
Программирование с использованием Wt строится вокруг виджетов, подобно Qt. Многие вещи похожи на Qt, что делает Wt простым для изучения для тех, кто знаком с Qt. В отличие от Qt, не происходит кодогенерации — используются сигналы, основанные на boost.signals, которые представляют собой обычный код C++, не требующий генерации. Сигналы виджетов (например, сигнал нажатия на кнопку) можно присоединять к любым функциям C++ (и функциональным объектам). Полностью асинхронный вход/выход (на основе библиотеки boost.asio) управляется событиями. Не происходит постоянного порождения и завершения потоков выполнения. Для каждой сессии на сервере хранится объект WApplication, через который доступно всё дерево виджетов. Доступ к виджетам сессии осуществляется способом, защищенным от «гонок», благодаря чему возможно безопасное взаимодействие сессий между собой и с сервером. Это продемонстрировано в примере чата. В этом же примере показано использование событий, инициируемых сервером (а не клиентом) и возможность включения приложения в другие страницы или сайты в виде загружаемого скрипта (вроде того, как виджет google maps может встраиваться в друге сайты).
Wt-приложения работают в основных браузерах, причем если JavaScript работает, выдается Ajax-версия, а если не работает — аналогичный HTML код, что является уникальной возможностью Wt, по крайней мере среди C++ фреймворков. Это позволяет без дополнительных усилий со стороны разработчика создавать приложение, использующее преимущества таких технологий, как Ajax, Comet, WebSocket, но в то же время работающее, если они недоступны. Кроме того, есть возможность оптимизации выдачи для поисковых роботов (речь идет не о клоакинге, а об улучшениях вроде отказа от случайных идентификаторов объектов). Wt может использовать такие новшества HTML5, как переписывание URL в браузере (для создания REST-приложений), выбор нескольких файлов, теги video и audio, но если их нет, по возможности используются обходные пути (к примеру, звук и видео через flash вместо тегов video и audio).
Возможно создание веб-приложений, подключаемых через http, fastcgi или ISAPI (последний только для платформ Win32). Какой именно способ соединения будет использоваться, определяется на этапе компоновки, выбором нужной библиотеки. Компонуя свой код с библиотекой встроенного http-сервера, получаем полноценный Веб-сервер, который удобно использовать при отладке, но можно запускать и на production, хотя в последнем случае стоит также рассмотреть возможность использования других способов соединения.
В Wt встроено использование Юникода и локализации.
Низкое потребление ресурсов позволяет запускать приложения на устройствах с ограниченными ресурсами, например, на роутерах.
Библиотеку удобно использовать для создания веб-интерфейсов для существующих программ, написанных на C++.
Библиотека обеспечивает высокий уровень безопасности, в частности защиту от атак XSS или SQL-injection. К примеру, виджет WText, отвечающий за отображение текста, убеждается, что его текст не содержит «опасных» атрибутов и тегов (вроде script), и вычищает их при необходимости. Имеется поддержка HTTPS. Есть защита от DDoS атак.
Библиотека также включает ряд надстроек, полезных при веб-разработке, в частности, систему рисования, систему построения диаграмм, ORM (отображение классов C++ на структуры баз данных), систему аутентификации.
Вообще хочется отметить чистоту и высокое качество кода библиотеки: легко читается не только документация, но при необходимости и код реализации. Сделано общо и гибко. Нигде (даже при компиляции кода, связанного с БД) не происходит кодогенерации. Часть библиотеки, ответственная за работу с БД, может быть использована (или куплена лицензия) отдельно от остальных компонентов. Эта часть библиотеки заслуживает отдельной статьи.
Для Wt доступны версии на Java и других языках, но тут я ограничусь рассмотрением C++ версии. Версия 1.0.0 была опубликована в 2005 году, так что по своей «зрелости» Wt может соперничать с Django и Ruby on Rails. Стоит отметить, что на C++ существует ещё как минимум два активных проекта: CppCMS и Tntnet. Сравнение возможностей представлено в википедии. Мой выбор пал на Wt в первую очередь за возможность полного абстрагирования от HTML, CSS, JavaScript в пользу одного языка — C++, а также за автоматическую поддержку как Ajax браузеров, так и браузеров без Ajax.
Пример простого приложения
#include #include #include #include #include #include using namespace Wt; /* * A simple hello world application class which demonstrates * how to react to events, read input, and give feed-back. */ class HelloApplication : public WApplication < public: HelloApplication(const WEnvironment& env); private: WLineEdit *nameEdit_; WText *greeting_; void greet(); >; /* * The env argument contains information about the new session, and * the initial request. It must be passed to the WApplication * constructor so it is typically also an argument for your custom * application constructor. */ HelloApplication::HelloApplication(const WEnvironment& env) : WApplication(env) < setTitle("Hello world"); // application title root()->addWidget(new WText("Your name, please ? ")); // show some text nameEdit_ = new WLineEdit(root()); // allow text input nameEdit_->setFocus(); // give focus WPushButton *button = new WPushButton("Greet me.", root()); // create a button button->setMargin(5, Left); // add 5 pixels margin root()->addWidget(new WBreak()); // insert a line break greeting_ = new WText(root()); // empty text /* * Connect signals with slots * * - simple Wt-way */ button->clicked().connect(this, &HelloApplication::greet); /* * using an arbitrary function object * (binding values with boost::bind()) */ nameEdit_->enterPressed().connect (boost::bind(&HelloApplication::greet, this)); > void HelloApplication::greet() < /* * Update the text, using text input into the nameEdit_ field. */ greeting_->setText("Hello there, " + nameEdit_->text()); > WApplication *createApplication(const WEnvironment& env) < /* * You could read information from the environment to decide whether * the user has permission to start a new application */ return new HelloApplication(env); >int main(int argc, char **argv) < /* * Your main method may set up some shared resources, but should then * start the server application (FastCGI or httpd) that starts listening * for requests, and handles all of the application life cycles. * * The last argument to WRun specifies the function that will instantiate * new application objects. That function is executed when a new user surfs * to the Wt application, and after the library has negotiated browser * support. The function should return a newly instantiated application * object. */ return WRun(argc, argv, &createApplication); >
Это пример простого приложения, спрашивающего имя пользователя. Когда пользователь вводит имя и нажимает Enter или кнопку «Greet me.», приложение привествует его: «Hello there, %USERNAME%». Думаю, разбирать код подробно смысла нет, тем более в нем есть комментарии.
Чтобы скомпилировать этот пример, нам потребуется компилятор C++ и установленная библиотека Wt. Везучие пользователи Debian и Ubuntu могут просто установить пакет witty-dev.
В линуксе команда компиляции выглядит так:
g++ hello.cpp -lwt -lwthttp -lboost_signals -o hello
./hello --docroot . --http-address 127.0.0.1 --http-port 8000
После чего приложени можно будет открыть в браузере по адресу 127.0.0.1:8000