Перенаправление не разрешено для предполетного запроса

У меня есть эта проблема, когда я получаю ответ при попытке использовать rest api: «Доступ к выборке в 'https://kollektivet.app:8082/api/login/' из источника 'https://kollektivet.app' заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: Перенаправление не допускается для предварительного запроса ".

Изображение ответа при попытке получить

Это происходит, когда я пробую любой из остальных api, которые использую. Из того, что я прочитал, эта ошибка означает, что я пытаюсь перенаправить, а это не так.

Бэкэнд - это Django, он выглядит так:

    @csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def register(request,):
        password = request.data.get("password", "")
        email = request.data.get("email", "")
        if not email and not password and not email:
            return Response(
                data = {
                    "message": "username, password and email is required to register a user"
                },
                status=status.HTTP_400_BAD_REQUEST
            )
        new_user = User.objects.create_user(
            email=email, password=password
        )
        return Response(status=status.HTTP_201_CREATED)

И интерфейс реагирует, что выглядит так:

createUser(event) {
        event.preventDefault();

        let data = {
            name: this.state.name,
            password: this.state.password,
            repeatPassword: this.state.repeatPassword,
            email: this.state.email
        };

        if (this.state.name !== '' && this.state.password !== '' && this.state.email !== '' && this.checkPasswords()) {
            console.info('name', this.state.name, 'password ', this.state.password, 'email ', this.state.email);
                fetch("https://kollektivet.app:8082/api/register/", {
                    method: 'POST',
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                    },
                    mode: "cors",
                    body: JSON.stringify(data)
                })
                    .then(response => response.json())
                    .then(data => console.info(data))
                    .catch(error => console.info(error));
            this.setState({message: "Du er nå registrert! For å aktivere din konto trykk på linken som vi har sendt til deg på epost"});
            this.setState({name: ""});
            this.setState({password: ""});
            this.setState({repeatPassword: ""});
            this.setState({email: ""});

        }
    }

У меня есть файл настроек Django:

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

Я использую это на apache2, если это актуально. Порт 8082 тоже закрыт. Должен ли он быть открытым, когда он находится на том же сервере?

Спасибо!

Используйте инструменты разработчика браузера, чтобы получить точный код состояния HTTP и заголовки ответа для ответа на предварительный запрос OPTIONS, а затем используйте stackoverflow.com/posts/53215045/edit для редактирования / обновления вопроса и вставки этого кода состояния HTTP и этих заголовков ответов.

sideshowbarker 08.11.2018 22:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
1
32 584
3

Ответы 3

Вас перенаправляют на site.site.comapi / register /

У вас есть другое промежуточное ПО, которое это делает? Может в конфиге Apache?

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

Таким образом, вам также необходимо очистить кеш перенаправления в браузере.

Вот почему мне не нравятся ответы 301. 302 намного вежливее.

У меня была такая же проблема, и я заметил, что было автоматическое перенаправление с www.example.com на example.com. Это фактически блокировало запрос.

Rami Zebian 19.03.2019 12:05

У меня была такая же проблема, пока я не обнаружил, что перенаправление было вызвано структурой интернационализации Django, где все URL-адреса получают расширение URL-адреса i18n, такое как /en/path_to_resource, когда на самом деле был запрошен path_to_resource. В рамках интернационализации это достигается за счет переадресации 302.

Решение этой проблемы - оставить URL-адреса rest-api за пределами раздела с i18n_patterns. В результате urls.py может выглядеть так:

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),
    path('rest/', include(('rest.urls', 'rest'), namespace='rest')),
]

urlpatterns += i18n_patterns(
    path('admin/', admin.site.urls),
    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    path('my_app/', include(('my_app.urls', 'my_app'), namespace='my_app')),
)

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

По сути, это проблема на стороне сервера, поэтому не нужно ничего менять во внешнем интерфейсе.

For this error message, it indicated that the OPTIONS requests got a response with the status code in either 301 Moved Permanently", "307 Temporary Redirect", or "308 Permanent Redirect".

Проверьте запрошенный URL с атрибутом 'location' из ответа OPTIONS, чтобы узнать, совпадают они или нет.

Для меня проблема заключалась в том, что мой URL-адрес запроса - **"https://server.com/getdata"** но URL-адрес, который я установил на сервере, был **"https://server.com/getdata/"**

затем сервер дает мне 308, чтобы исправить это с помощью '/', это работает для POST, GET и HEAD, но не для OPTIONS.

Я использую flask, flask_restful и flask_cors.

использование этого также решит эту проблему перенаправления для меня.

app.url_map.strict_slashes = False

Другие вопросы по теме