почему выполнение запроса GET с параметром поиска не вернет 404, даже если ресурсы не найдены - PullRequest
1 голос
/ 11 апреля 2020

Я столкнулся с этой странной проблемой, когда экспериментировал с объектом URL JavaScript

, вот пример: https://codesandbox.io/s/fervent-wilbur-15kyt?file= / src / index. js

, поэтому конечная точка равна https://jsonplaceholsdsdsdder.typicode.com/todos/,

Ключ id может быть целым числом в качестве значения. Так что https://jsonplaceholder.typicode.com/todos/?id=4 действительно. и https://jsonplaceholder.typicode.com/todos/?id=dsdsd недопустимо.

Я обнаружил, что использование Fetch для выполнения запроса https://jsonplaceholder.typicode.com/todos/?id=4 все равно вернет ответ с кодом состояния 200.


const inputEl = document.querySelector("#input");

const endpoint = new URL("https://jsonplaceholder.typicode.com/todos/");
inputEl.addEventListener("input", async e => {
  const { value: text } = e.target;
  endpoint.searchParams.set("id", text);
  const repsonse = await fetch(endpoint).catch(console.error);
  const data = await repsonse.json();
  console.log(repsonse.status); // 200
  console.log(data); // []
});

Однако, если мы создадим URL-адрес напрямую, как это https://jsonplaceholsdsdsdder.typicode.com/todos/dd. это фактически возвратит ответ с кодом состояния 404.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

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

https://jsonplaceholder.typicode.com/todos/ - это допустимое расположение ресурса, которое было установлено jsonplaceholder.com.

https://jsonplaceholder.typicode.com/todos/?id=4 является допустимым местоположением ресурса, поскольку все, что находится после знака вопроса (?), Является параметром, и параметры не считаются отделенными от местоположения ресурса, поэтому оно все еще является действительным.

https://jsonplaceholsdsdsdder.typicode.com/todos/dd не является допустимым расположением ресурса, поскольку jsonplaceholder.com не предоставил ресурс с этим путем.

1 голос
/ 11 апреля 2020

Это связано с тем, как API работает на стороне сервера.

Если вы попытаетесь использовать этот маршрут, вы получите ошибку 404, поскольку указанный c маршрут не найден.

Если вы используете метод searchParams.set, это всего лишь параметр, который серверная часть будет использовать для фильтрации полного списка задач, и в этом случае вызов был выполнен успешно, отсюда и код ответа 200. но результаты ответа были пустыми, следовательно, пустой массив [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...