Введение
HTTP
Протокол (протокол передачи гипертекста), который представляет собой протокол передачи прикладного уровня, основанный на протоколе TCP.Проще говоря, это правило для передачи данных между клиентом и сервером.
Уведомление: Роли клиента и сервера не фиксированы.Один конец выступает в качестве клиента, а также может выступать в качестве сервера в запросе. Это зависит от отправителя запроса. Протокол HTTP относится к прикладному уровню и построен поверх протокола транспортного уровня TCP. Клиент устанавливает TCP-соединение с сервером, а затем отправляет HTTP-запросы и получает HTTP-ответы, обращаясь к интерфейсу Socket для вызова протокола TCP.
HTTP
этонет статуса(без гражданства) протокол,HTTP
Сам протокол не сохраняет отправленный запрос и соответствующее состояние связи. Целью этого является сохранение простоты протокола HTTP, чтобы он мог быстро обрабатывать большое количество транзакций и повышать эффективность.
Однако во многих сценариях приложений нам необходимо, чтобы пользователь оставался в системе или записывал товары в корзине пользователя. так какHTTP
является протоколом без сохранения состояния, поэтому необходимо ввести некоторые методы для записи состояния управления, такие какCookie
.
текст
HTTP URL
HTTP URL
Содержит подробную информацию для поиска ресурса в следующем формате:
http://host[":"port][abs_path]
HTTP-запрос
Следующее изображение — это изображение, найденное в Интернете, и я думаю, что оно может очень хорошо отображать формат данных, отправляемых HTTP-запросом.
Как видно из вышеуказанного рисунка, HTTP-запрос состоит из трех частей: строка запроса, заголовок сообщения и тело запроса.
Строка состояния HTTP-запроса
строка запроса по запросуMethod
, URL
поля иHTTP Version
Он состоит из трех частей. Как правило, строка запроса определяет метод запроса этого запроса, запрошенный адрес и версию протокола HTTP, которой следует следовать. Например:
GET /example.html HTTP/1.1 (CRLF)
Методы протокола HTTP:
-
GET
: проситьПолучатьРесурс, указанный Request-URI -
POST
: после ресурса, указанного Request-URIУвеличиватьновые данные -
HEAD
: Запрос на получение ресурса, указанного Request-URI.заголовок ответного сообщения -
PUT
: сервер запросовхранить или изменятьресурс с Request-URI в качестве идентификатора -
DELETE
: сервер запросовУдалитьРесурс, указанный Request-URI -
TRACE
: запросите у сервера отправку полученной информации запроса, в основном используемой длятест или диагноз -
CONNECT
: зарезервировано для использования в будущем -
OPTIONS
: запрос на запрос производительности сервера или на запрос параметров и требований, связанных с ресурсом.
Заголовки HTTP-запроса
Заголовок сообщения состоит из ряда пар ключ-значение, что позволяет клиенту отправлять некоторую дополнительную информацию на сервер или информацию о самом клиенте, в том числе:
Header | объяснять | Пример |
---|---|---|
Accept | Указывает тип контента, который может получать клиент. | Accept: text/plain, text/html |
Accept-Charset | Набор кодировок символов, принимаемых браузером | Accept-Charset: iso-8859-5,utf-8 |
Accept-Encoding | Указывает тип кодирования сжатия содержимого, возвращаемый веб-сервером, который может поддерживать браузер. | Accept-Encoding: compress, gzip |
Accept-Language | Языки, принимаемые браузером | Accept-Language: en,zh |
Accept-Ranges | Можно запросить одно или несколько полей подобласти объекта веб-страницы. | Accept-Ranges: bytes |
Authorization | Тип сертификата авторизации для HTTP-авторизации | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | Указывает механизм кэширования, за которым следуют запросы и ответы. | Cache-Control: no-cache |
Connection | Указывает, требуются ли постоянные подключения (HTTP 1.1 по умолчанию использует постоянные подключения) | Connection: close |
Cookie | Когда HTTP-запрос отправлен, сохраните все значения cookie ниже доменного имени запроса на веб-сервере. | Cookie: $Version=1; Skin=new; |
Content-Length | Длина запрошенного контента | Content-Length: 348 |
Content-Type | Запрошенная информация MIME, соответствующая объекту | Content-Type: application/x-www-form-urlencoded |
Date | дата и время отправки запроса | Date: Tue, 15 Nov 2010 08:12:31 GMT |
Expect | Запрошено определенное поведение сервера | Expect: 100-continue |
From | Электронная почта пользователя, сделавшего запрос | From: user@email.com |
Host | Укажите доменное имя и номер порта запрашиваемого сервера | Host: www.zcmhi.com |
If-Match | Действителен только в том случае, если содержимое запроса соответствует объекту | Если-совпадение: "737060cd8c284d8af7ad3082f209582d" |
If-Modified-Since | Если часть запроса изменена по истечении указанного времени, запрос считается успешным, и возвращается код 304, если он не был изменен. | If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-None-Match | Если содержимое не изменилось, верните код 304, параметр — это Etag, ранее отправленный сервером, и сравните его с Etag, возвращенным сервером, чтобы определить, изменился ли он. | Если-нет-совпадения: "737060cd8c284d8af7ad3082f209582d" |
If-Range | Если сущность не изменилась, сервер отправляет клиенту недостающую часть, в противном случае он отправляет всю сущность. Параметр также является Etag | Если-диапазон: "737060cd8c284d8af7ad3082f209582d" |
If-Unmodified-Since | Запрос выполняется только в том случае, если объект не был изменен после указанного времени. | If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
Max-Forwards | Ограничьте время прохождения информации через прокси и шлюзы | Max-Forwards: 10 |
Pragma | Используется для содержания инструкций, специфичных для реализации. | Pragma: no-cache |
Proxy-Authorization | Сертификат полномочий для подключения к брокеру | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range | Запросить только часть сущности, указав область действия | Range: bytes=500-999 |
Referer | Адрес предыдущей страницы, за которой следует текущая страница запроса, т.е. источник | Referer: Woohoo.Регистрационный код Hi.com/archives/71… |
TE | Кодировка передачи, которую клиент готов принять, и информирует сервер о необходимости принять информацию заголовка. | TE: trailers,deflate;q=0.5 |
Upgrade | Укажите транспортный протокол к серверу для преобразования сервером (если поддерживается) | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
User-Agent | Содержимое User-Agent содержит информацию о пользователе, сделавшем запрос | User-Agent: Mozilla/5.0 (Linux; X11) |
Via | Сообщить адрес промежуточного шлюза или прокси-сервера, протокол связи | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning | Предупреждения о сообщениях | Warn: 199 Miscellaneous warning |
Тело HTTP-запроса
только при отправкеPOST
Тело запроса будет только тогда, когда запрос будет сделан.GET
Метод не имеет тела запроса.
Сообщение HTTP-запроса
HTTP-ответ
Аналогично HTTP-запросу, сначала предыдущее изображение:
Ответ HTTP также состоит из трех частей, включая строку состояния, заголовки сообщений и текст ответа.
Строка состояния ответа HTTP
Строка состояния также состоит из трех частей, включая версию протокола HTTP, код состояния и текстовое описание кода состояния. Например:
HTTP/1.1 200 OK (CRLF)
Код состояния ответа HTTP
Код состояния состоит из трех цифр, первая цифра определяет ответкатегория, и есть пять возможных значений:
-
1xx
:инструкции- Указывает, что запрос получен, продолжить обработку -
2xx
:успех- Указывает, что запрос был успешно получен, понят, принят -
3xx
:перенаправить- Для выполнения запроса требуются дальнейшие действия. -
4xx
:Ошибка клиента- В запросе есть синтаксическая ошибка или запрос не может быть выполнен -
5xx
:Ошибка на стороне сервера- сервер не смог выполнить законный запрос
Общие коды состояния, описания состояний, описания:
-
200
:OK- Запрос клиента выполнен успешно -
400
:Bad Request- В клиентском запросе есть синтаксическая ошибка, которую сервер не может понять. -
401
:Unauthorized- запрос не авторизован, этот код состояния должен совпадать сWWW-Authenticate
поля заголовка, используемые вместе -
403
:Forbidden- Сервер получает запрос, но отказывается обслуживать -
404
:Not Found- Запрошенный ресурс не существует, например: был введен неверный URL-адрес. -
500
:Internal Server Error- Произошла непредвиденная ошибка на сервере -
503
:Server Unavailable- В настоящее время сервер не может обработать запрос клиента и может вернуться в нормальное состояние через некоторое время.
Описание кода состояния ответа HTTP
StatusCode | Семантика кода состояния | Китайское описание |
---|---|---|
100 | Continue | Продолжать. Клиент должен продолжить свой запрос |
101 | Switching Protocols | Переключение протоколов. Сервер переключает протоколы по запросу клиента. Может переключаться только на протокол более высокого уровня, например, на более новую версию HTTP. |
200 | OK | Запрос выполнен успешно. Обычно используется для запросов GET и POST. |
201 | Created | созданный. Успешно запрошен и создан новый ресурс |
202 | Accepted | принятый. Заявка принята, но не выполнена |
203 | Non-Authoritative Information | Несанкционированная информация. Запрос выполнен успешно. Но возвращенная метаинформация находится не на исходном сервере, а на копии |
204 | No Content | Без содержания. Сервер успешно обработал, но не вернул содержимого. Гарантирует, что браузер продолжает отображать текущий документ без обновления веб-страницы. |
205 | Reset Content | Сбросить содержимое. Серверный процесс выполнен успешно, и пользовательский терминал (например, браузер) должен сбросить представление документа. Поля формы браузера можно очистить с помощью этого кода возврата. |
206 | Partial Content | Часть. Сервер успешно обработал часть запроса GET |
300 | Multiple Choices | множественный выбор. Запрошенный ресурс может включать несколько местоположений, и, соответственно, список характеристик и адресов ресурса может быть возвращен для выбора пользовательского терминала (например, браузера). |
301 | Moved Permanently | Переехать навсегда. Запрошенный ресурс был окончательно перемещен на новый URI, возвращаемая информация будет включать новый URI, и браузер будет автоматически перенаправлен на новый URI. Любые новые запросы в будущем должны использовать вместо этого новый URI. |
302 | Найден Временно перемещен. | Похоже на 301. Но ресурс перемещается только временно. Клиенты должны продолжать использовать исходный URI. |
303 | See Other | Посмотрите другие адреса. Похоже на 301. Просмотр с использованием запросов GET и POST |
304 | Not Modified | Без изменений. Запрошенный ресурс не был изменен, и ресурс не будет возвращен, когда сервер вернет этот код состояния. Клиенты обычно кэшируют посещенные ресурсы, предоставляя заголовок, указывающий, что клиент хочет вернуть только ресурсы, измененные после указанной даты. |
305 | Use Proxy | Используйте прокси. Запрошенный ресурс должен быть доступен через прокси |
306 | Unused | Устаревшие коды состояния HTTP |
307 | Temporary Redirect | Временная переадресация. Похоже на 302. Перенаправление с помощью GET-запроса |
400 | Bad Request | В клиентском запросе есть синтаксическая ошибка, которую сервер не может понять. |
401 | Unauthorized | Запрос требует аутентификации пользователя |
402 | Payment Required | зарезервировано для использования в будущем |
403 | Forbidden | Сервер понимает запрос запрашивающего клиента, но отказывается выполнять запрос |
404 | Not Found | Сервер не смог найти ресурс (веб-страницу) по запросу клиента. С помощью этого кода веб-дизайнеры могут настроить персонализированную страницу с надписью «Запрошенный вами ресурс не найден». |
405 | Method Not Allowed | метод в клиентском запросе запрещен |
406 | Not Acceptable | Сервер не может выполнить запрос на основе характеристик содержимого запроса клиента. |
407 | Proxy Authentication Required | Запрос требует проверки подлинности прокси-сервера, аналогичной 401, но запрашивающая сторона должна использовать прокси-сервер для авторизации. |
408 | Request Time-out | Сервер слишком долго ждет запроса, отправленного клиентом, и истекает время ожидания. |
409 | Conflict | Сервер может вернуть этот код после завершения клиентского запроса PUT, и при обработке запроса сервером возник конфликт. |
410 | Gone | Ресурс, запрошенный клиентом, больше не существует. 410 отличается от 404. Если ресурс был удален ранее безвозвратно, можно использовать код 410, а дизайнер сайта может указать новое местоположение ресурса через код 301. |
411 | Length Required | Сервер не может обработать информацию запроса, отправленную клиентом без Content-Length |
412 | Precondition Failed | Информация о запросе клиента с неправильными предварительными условиями |
413 | Request Entity Too Large | Запрос был отклонен, так как запрошенный объект был слишком большим для обработки сервером. Чтобы предотвратить непрерывные запросы от клиентов, сервер может закрыть соединение. Если сервер не может временно его обработать, он будет содержать ответное сообщение Retry-After. |
414 | Request-URI Too Larg | Запрошенный URI (обычно URL) слишком длинный для обработки сервером. |
415 | Unsupported Media Type | Сервер не может обработать формат мультимедиа, прикрепленный к запросу. |
416 | Requested range not satisfiable | Недопустимая область действия, запрошенная клиентом |
417 | Expectation Failed | Сервер не может удовлетворить информацию заголовка запроса Expect |
500 | Internal Server Error | Внутренняя ошибка сервера, невозможно выполнить запрос |
501 | Not Implemented | Сервер не поддерживает запрошенную функцию и не может выполнить запрос |
502 | Bad Gateway | Сервер, выступающий в роли шлюза или прокси-сервера, получил недопустимый запрос от удаленного сервера. |
503 | Service Unavailable | Из-за перегрузки или обслуживания системы сервер временно не может обработать запрос клиента. Продолжительность задержки может быть включена в заголовок сервера Retry-After. |
504 | Gateway Time-out | Сервер, выступающий в роли шлюза или прокси, не получил вовремя запрос от удаленного сервера. |
505 | HTTP Version not supported | Сервер не поддерживает запрошенную версию протокола HTTP и не может завершить обработку |
HTTP-ответное сообщение
Подробное объяснение протокола HTTP
Пять особенностей HTTP
- служба поддержкиклиент/сервермодель.
-
Просто и быстро: когда клиент запрашивает услугу с сервера, ему нужно только передать метод запроса и путь. Обычно используемые методы запроса:
GET
,HEAD
,POST
. Каждый метод определяет другой тип контакта клиент-сервер. так какHTTP
Протокол прост, что делаетHTTP
Размер программы сервера небольшой, поэтому скорость связи высокая. -
гибкий: HTTP позволяет передавать объекты данных любого типа. Передаваемый тип задается
Content-Type
быть отмечены. -
нет соединения: Значение без установления соединения заключается в том, чтобы ограничить обработку только одним запросом на одно соединение. После того, как сервер обработает запрос клиента и получит ответ клиента, он отключится. Таким образом можно сэкономить время передачи. Причина для того, чтобы сделать это в первые дни, состоит в том, чтобы запросить меньше ресурсов и быстро следовать. позже через
Connection: Keep-Alive
долгосрочная связь -
нет статуса:
HTTP
Протокол является протоколом без сохранения состояния. Без сохранения состояния означает, что протокол не имеет памяти для обработки транзакций. Отсутствие состояния означает, что если предыдущая информация требуется для последующей обработки, она должна быть передана повторно, что может привести к увеличению объема данных, передаваемых за соединение. С другой стороны, сервер быстрее отвечает, когда ему не нужна предыдущая информация.
Непостоянные и постоянные соединения
В практических приложениях клиент часто отправляет серию запросов, а затем сервер отвечает на каждый запрос. Для этих запросов|ответов, если каждый отправляется через отдельное TCP-соединение, называемоенепостоянное соединение. И наоборот, если он каждый раз отправляется через одно и то же TCP-соединение, он называетсяпостоянное соединение.
Непостоянные соединения должны быть разорваны после каждого запроса|ответа, и в следующий раз будет установлено новое TCP-соединение, что вызывает большие накладные расходы на связь. Например, вышеупомянутое время в оба конца(RTT)
Это цена в процессе установления TCP-соединения.
Непостоянные подключения ложатся тяжелым бременем на серверы, каждый из которых может обрабатывать сотни и более запросов одновременно. Постоянное соединение предназначено для решения этих проблем, которое характеризуется сохранением состояния TCP-соединения до тех пор, пока не будет получен явный запрос на прерывание, а затем соединение будет прервано. Постоянные соединения уменьшают накладные расходы на связь и экономят трафик.
HTTP и HTTPS
Недостатки HTTP
- Для связи используется открытый текст (не зашифрованный), содержимое может быть перехвачено
- Личность общающейся стороны не проверяется, поэтому есть вероятность маскировки
- Целостность сообщения не может быть доказана, возможно, оно было подделано.
Введение в HTTPS
HTTP
В протоколе нет механизма шифрования, но его можноSSL
(Secure Socket Layer, безопасный уровень сокетов)илиTLS
(Transport Layer Security, Транспортный протокол уровня безопасности) в комбинации, зашифрованныйHTTP
Содержание связи. Он относится к шифрованию связи, который зашифрован по всей линии связи.
HTTP + 加密 + 认证 + 完整性保护 = HTTPS(HTTP Secure )
HTTPS
использоватьШифрование с общим ключом(симметричный) ишифрование с открытым ключом(асимметричный) обасмешиваниемеханизм шифрования. Если можно безопасно обмениваться ключами, то можно рассмотреть возможность использования для связи только шифрования с открытым ключом. Но шифрование с открытым ключом медленнее, чем шифрование с общим ключом.
Поэтому мы должны в полной мере воспользоваться их соответствующими преимуществами и объединить несколько методов для общения. существуетобмен ключамисценическое использованиешифрование с открытым ключомкстати, после установления связиобмен сообщениямиэтап используетсяШифрование с общим ключомСпособ.
HTTPS
Краткое описание процесса рукопожатия выглядит следующим образом:
-
Браузер отправляет набор поддерживаемых им правил шифрования на веб-сайт.
服务器获得浏览器公钥
-
Веб-сайт выбирает набор алгоритмов шифрования и алгоритмов HASH и отправляет свою идентификационную информацию обратно в браузер в виде сертификата. Сертификат содержит такую информацию, как адрес веб-сайта, открытый ключ шифрования и орган, выдавший сертификат.
浏览器获得服务器公钥
-
После получения сертификата веб-сайта браузер должен сделать следующее:
(a) Проверить легитимность сертификата (является ли организация, выпустившая сертификат, законной, совпадает ли адрес веб-сайта, указанный в сертификате, с посещаемым адресом и т. д.), если сертификат является доверенным, небольшое замок будет отображаться в строке браузера, в противном случае он выдаст сообщение о том, что сертификат не является доверенным.
(б) Если сертификат является доверенным или пользователь принимает ненадежный сертификат, браузер сгенерирует случайное количество паролей (ключ для последующей связи) и зашифрует их с помощью открытого ключа, предоставленного в сертификате (общий ключ). шифрование).
(c) Используйте согласованный HASH для расчета сообщения рукопожатия, зашифруйте сообщение сгенерированным случайным числом и, наконец, отправьте всю ранее сгенерированную информацию на веб-сайт.
浏览器验证 -> 随机密码 服务器的公钥加密 -> 通信的密钥 通信的密钥 -> 服务器
-
После того, как веб-сайт получает данные, отправленные браузером, он делает следующее:
(а) Используйте свой собственный закрытый ключ для расшифровки информации и извлечения пароля, используйте пароль для расшифровки сообщения рукопожатия, отправленного браузером, и проверьте, соответствует ли HASH тому, который отправлен браузером.
(b) Зашифруйте сообщение рукопожатия с помощью пароля и отправьте его в браузер.
服务器用自己的私钥解出随机密码 -> 用密码解密握手消息(共享密钥通信)-> 验证HASH与浏览器是否一致(验证浏览器)
Недостатки HTTPS
- Процесс шифрования и дешифрования сложен, что приводит к низкой скорости доступа.
- Шифрование требует оплаты центру сертификации
- Весь запрос страницы должен использовать HTTPS
Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими продуктами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.