Подробное решение HTTP-статуса 404

Java

Википедия:

Сообщение об ошибке HTTP 404 или Not Found является одним из «стандартных ответных сообщений» HTTP (коды состояния HTTP). Это сообщение указывает, что, когда клиент просматривает веб-страницы, сервер не может нормально предоставить сообщение или сервер не может ответить, и причина неизвестно. Обычно это связано с тем, что соответствующая веб-страница, которую посетил пользователь, была удалена, перемещена или никогда не существовала. 404 также является одной из самых распространенных ошибок в Интернете. Сообщение об ошибке 404 может сбивать с толку сообщение «сервер не найден» или другие подобные сообщения.

Проще говоря, запрошенный на сервере ресурс не существует, или если он существует, запрос, который мы отправляем через URL (унифицированный локатор ресурсов), не находит требуемый ресурс на сервере.

что такое URL

Наиболее распространенной причиной ошибки 404 является ошибка пути. Давайте сначала разберемся с URL. URL (унифицированный указатель ресурсов) Единый указатель ресурсов, также известный как Унифицированный указатель ресурсов, адрес местоположения, URL-адрес, широко известный как адрес веб-страницы или сокращенно URL-адрес. Как следует из названия, где ресурсы используются для служб определения местоположения? Где найти отправленный Запрос, а затем сервер выдает соответствующий логический ответ (Response).

Стандартный формат унифицированного указателя ресурсов выглядит следующим образом:

[协议类型]://[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]

Полный формат унифицированного указателя ресурсов выглядит следующим образом:

[协议类型]://[访问资源需要的凭证信息]@[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]

Возьмите каштан:

http://127.0.0.1:8080/f?kw=%BA%A3%D4%F4%CD%F5&fr=ala0&tpl=5

http — протокол, 127.0.0.1 — адрес моего сервера; 8080 — номер порта на сервере; /f — путь, где / разделяет каталоги и подкаталоги. ?kw=%BA%A3%D4%F4%CD%F5&fr=ala0&tpl=5 — это запрос. ? отделяет фактический URL от параметров, здесь легко ошибиться. Хотя данные (кроме чисел) преобразуются в URL-кодировку в UTF8, & используется для разделителя между параметрами, = равно (не присваивание), а помимо первого есть + для пробела и # для закладки.

Обратите внимание на форматирование: 1) Как правило, проекты, запущенные такими серверами, как Tomcat и nginx, должны проверять правильность порта. 2) Неверно ли указано имя протокола http/https, имя домена или IP-адрес? 3) / разделитель, чтобы различать каждое имя каталога в пути с /. Таким образом, мы можем искать каталог нашего проекта слой за слоем в соответствии с URL-адресом и анализировать, является ли возможная причина 404 ошибкой пути или ресурс не существует. 3) Параметр, представленный символом &, можно оценить, соответствует ли его значение ожиданиям.

Полный HTTP-запрос

Понимание процесса наших запросов помогает нам понять общий поток в Интернете. Общий процесс выглядит следующим образом: Разрешение доменного имени --> Инициировать трехстороннее рукопожатие TCP --> Инициировать http-запрос после установления TCP-соединения --> Сервер отвечает на http-запрос, и браузер получает HTML-код --> Браузер анализирует HTML-код и запрашивает ресурсы в HTML-коде (например, js, css, изображения и т. д.) --> Браузер отображает страницу пользователю. Ниже мы подробно объясним, что они делают?

1) Разрешение доменного имени DNS

что такое днс? Преобразование доменного имени хоста в IP-адрес, который принадлежит протоколу прикладного уровня и использует передачу UDP. Как работает днс: 1. Запрос хоста к локальному серверу доменных имен обычно представляет собой рекурсивный запрос.
2. Итеративный запрос запроса от локального сервера доменных имен к корневому серверу доменных имен.

  1. Когда пользователь вводит доменное имя, браузер сначала проверяет, существует ли в его кеше IP-адрес, отображаемый доменным именем, и разрешение заканчивается.
    2) Если попаданий нет, проверьте, есть ли в кеше операционной системы (например, хосты Windows) проанализированный результат, и синтаксический анализ завершается.
    3) Если совпадения нет, запросите разрешение локального сервера доменных имен (LDNS).
    4) Если LDNS не попал, он напрямую перейдет к корневому серверу доменных имен, чтобы запросить разрешение. Корневой сервер имен возвращает адрес основного сервера имен в LDNS.
    5) В этот момент LDNS отправляет запрос в gTLD (общий домен верхнего уровня), возвращенный на предыдущем шаге, принимает запрошенный поиск gTLD и возвращает адрес сервера имен, соответствующий этому доменному имени.
    6) Name Server находит целевой ip по таблице сопоставления и возвращает его в LDNS
    7) LDNS кэширует доменное имя и соответствующий ip и возвращает результат разрешения пользователю.Пользователь кэширует доменное имя в кэше локальной системы в соответствии со значением TTL, и на этом процесс разрешения доменного имени заканчивается.

2) Инициировать трехстороннее рукопожатие TCP для установления TCP-соединения.

Зачем tcp нужно трехстороннее рукопожатие? Объяснение, данное «Компьютерной сетью» Се Сирена, состоит в том, чтобы предотвратить внезапную передачу на сервер сегмента неудачного запроса на подключение, что приведет к ошибке. Процесс трехстороннего рукопожатия: Первое рукопожатие: когда соединение установлено, клиент отправляет пакет синхронизации (syn=j) на сервер и переходит в состояние SYN_SEND, ожидая подтверждения от сервера;

Второе рукопожатие: сервер получает пакет syn и должен подтвердить SYN клиента (ack=j+1), и в то же время отправляет пакет SYN (syn=k), то есть пакет SYN+ACK, в это время время перехода сервера в состояние SYN_RECV;

Третье рукопожатие: клиент получает пакет SYN+ACK от сервера и отправляет на сервер пакет подтверждения ACK (ack=k+1).После отправки пакета клиент и сервер переходят в состояние ESTABLISHED и завершают трехстороннее рукопожатие.

После завершения трехэтапного рукопожатия клиент и сервер начинают передавать данные.

Некоторые люди говорят, что будут ошибки 404 из-за потери пакетов? Вероятность крайне мала. Давайте посмотрим на вклад великих предшественников в TCP.Я должен упомянуть об этом здесь.Как TCP гарантирует надежную передачу, и вышеуказанное соглашение о трехстороннем рукопожатии находятся в центре внимания собеседования при приеме на работу в школу.

1. Трехстороннее рукопожатие.
2. Сократите данные до разумной длины. Данные приложения разбиваются на куски, которые, по мнению TCP, наиболее подходят для отправки (нумеруются по байтам, разумно фрагментированы).
3. Тайм-аут повторной передачи. Когда TCP отправляет сегмент, он запускает таймер и повторяет передачу, если не может вовремя получить подтверждение.
4. Подтверждающий ответ: на полученный запрос дайте подтверждающий ответ.
5. Контрольная сумма: если в проверочном пакете есть ошибка, сегмент отбрасывается, и ответ не дается.
6. Серийный номер: переупорядочивайте неупорядоченные данные перед их передачей на прикладной уровень.
7. Отменить повторяющиеся данные: для повторяющихся данных можно удалить повторяющиеся данные.
8. Управление потоком. Каждая сторона соединения TCP имеет фиксированный объем буферного пространства. Принимающая сторона TCP позволяет другой стороне отправлять столько данных, сколько может вместить буфер принимающей стороны. Это предотвратит переполнение буфера более медленного хоста более быстрым хостом.
9. Контроль заторов. Когда сеть перегружена, уменьшите отправку данных.

3) После установления TCP-соединения инициируйте http-запрос

HTTP — это протокол запроса/ответа без сохранения состояния, но он не соответствует текущему бизнесу, поэтому файлы cookie и сеансы используются для сохранения состояния.

Полное сообщение HTTP-запроса состоит из четырех частей: строки запроса, заголовка запроса, пустой строки и данных запроса. как показано на рисунке:

Мы также можем открыть Google--> F12, чтобы войти в режим отладки--> Сеть--> Просмотр информации. Он содержит много информации о запросе или информации об ответе, и мы также можем разрабатывать операции на их основе.

Давайте разберемся с общими методами HTTP-запроса: GET, POST, DELETE, TRACE, CONNECT.

имя метода намерение
POST Данные обработки запроса, обычно используемые для изменения и добавления ресурсов
GET Он используется только для чтения данных без модификации и возврата на указанную страницу.
DELETE удалить указанный ресурс
TRACE В основном используется для тестирования или диагностики, обычно не используется
CONNECT Обычно используется для соединений с шифрованием SSL к серверам, к прокси-серверам, которые могут передавать соединение.

Примечание: укажите это здесьРазница между куки и сессиями(Интервью часто тестируется):

1, место хранения отличается. cookie: хранится на стороне клиента, сеанс: хранится на стороне сервера. Данные, хранящиеся в сеансе, относительно безопасны

2, типы хранимых данных отличаются. Оба являются структурами ключ-значение, но есть различия в типе значения.

cookie: значение может быть только строкового типа, сеанс: значение имеет тип объекта

3. Размер хранимых данных ограничен. cookie: размер ограничен браузером, многие из которых имеют размер 4K, session: теоретически ограничен текущей памятью,

4, контроль жизненного цикла. Жизненный цикл файла cookie завершается при закрытии браузера.

(1) Жизненный цикл файла cookie является кумулятивным. Отсчет времени начинается с момента создания. Через 30 минут жизненный цикл файла cookie заканчивается.

(2) Жизненный цикл сеанса интервальный.С момента создания, если время составляет 30 минут, если доступ к сеансу отсутствует, то жизненный цикл сеанса уничтожается.

4) Сервер отвечает на http запрос, а браузер получает html код

5) Браузер анализирует html-код и запрашивает ресурсы в html-коде (такие как js, css, картинки и т. д.)

HTML-страницы в основном состоят из dom, css, javascript и других частей, а также могут быть представлены другие ресурсы, такие как img и iframe. Браузер получает html-код, который может быть полным документом или фрагментом, который начинает парсить. Процесс синтаксического анализа состоит в том, чтобы сначала построить дерево DOM, затем построить дерево рендеринга на основе дерева DOM, и, наконец, браузер рисует дерево рендеринга на странице.

6) Браузер отображает страницу пользователю

Что такое рендеринг? Рендеринг в компьютерной графике относится к процессу использования программного обеспечения для генерации изображений из моделей, то есть преобразования логики нашего HTML в объекты, видимые невооруженным глазом. Конкретные уроки смотрите в блоге:sylva, то есть sun.GitHub.IO/2017/10/03/…

Некоторые решения для 404

1) На каталоги нельзя ссылаться. Метод устранения неполадок:

Проверьте, где хранятся файлы, в «Проводнике пакетов» Eclipse. Из-за META-INF

Содержимое папки WEB-INF нельзя публиковать извне, поэтому если вы ссылаетесь на файлы с этими двумя каталогами, это определенно запрещено. Например: http://localhost:8080/guestbook/WEB-INF/index.html неверен

ошибка расположения файла

2) URL введен неправильно. Метод устранения неполадок:

Сначала проверьте правильность написания IP-адреса и номера порта URL-адреса.

Во-вторых, проверьте правильность контекстного пути Project-------Properties------MyElipse-----Web-----

Web Context-root проверяет правильность написания имени пути.

Наконец, проверьте правильность написания имени файла. 3) Веб-приложение не развернуто

4) Проблема в web.xml на сервере Tomcat. Метод устранения неполадок:

Если ваше веб-приложение имеет несколько страниц jsp, может возникнуть ошибка 404 при нажатии на виртуальный корневой каталог вашего веб-приложения, но вам нужно только изменить файл web.xml на сервере Tomcat.

 <init-param>
 
        <param-name>listings</param-name>
 
        <param-value>false(将其该为true)</param-value>
 
  </init-param>

Дополнительное примечание: В версии 6.0.18 ошибка: «Запрошенный ресурс () недоступен».

Всегда не удается получить доступ к файлам /myapp/*.jsp, вы можете скопировать копию файла build.xml в /ROOT в myapp и обратить внимание на замену всех ROOT на myapp.Все должно быть в порядке.

5) Должно быть несколько фиксированных папок и файлов под WEB-INF

 ±web.xml 该web app的配置文件
 
 ±lib 该web app用到的库文件
 
 ±classes存放编译好的servlet 

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

6. Если вы хотите запустить файл сервлета (.class) вместо файла .jsp, настройте web.xml (конечно, в WEB-INF) и добавьте следующие поля:

 <servlet>
 
      <servlet-name>HelloWorldServlet</servlet-name>
 
      <servlet-class>HelloWorldServlet</servlet-class>
 
 </servlet>
 
 <servlet-mapping>
 
      <servlet-name>HelloWorldServlet</servlet-name>
    
      <url-pattern>/HelloWorldServlet</url-pattern>
 
 </servlet-mapping>

«HelloWorldServlet» в нем изменено на имя файла, который вы хотите запустить.

7) ошибка конфигурации struts.xml, возможно, у вас неправильное значение действия или неверный URL-адрес ссылки

Ниже приводится мое собственное решение. Многие книги импортируют шесть файлов. По моим собственным словам, я добавил commons-lang3-3.1.jar и javassist-3.11.GA.jar.

Добавьте файл commons-lang3-3.1.jar в каталог WEB-INF/lib.Последний пакет веб-разработки struts2 выглядит следующим образом:

ссылка для скачивания:download.CSDN.net/detail/ а есть еще 1…

Решите вариант использования и столкнитесь с постоянными обновлениями в будущем....