400 - это запрос, который сервер не смог понять. Например, POST-запрос туда, куда можно делать только GET/HEAD. Или слишком длинный $uri.
Если сервер смог получить запрос, "понять" его, обработать, но показать пользователю по этому $uri нечего - то это 404. В случае с товаром - явно 404.
Вообще, выставлять руками 400 ошибку вам никогда не нужно, кроме тех случаев, когда вы явно уверены, что хотите 400-ку (ну вот в примере с POST-запросом можно руками выставить, но вообще это 405, просто его редко используют). Генерация 400й ошибки для 99% случаев в мире - это работа вебсервера, а не кода.