Задать вопрос
@HellWalk

Почему JQuery формирует такой запрос?

Есть такой запрос, сформирован через Postman:

POST /API/V0.1/schedule_query/ESIAFindAccount/ HTTP/1.1
Content-Type: application/json
X-Auth-Token: xxx
User-Agent: PostmanRuntime/7.20.1
Accept: */*
Cache-Control: no-cache
Postman-Token: 74d8ebff-9eba-487f-951c-7e51310bfc46
Host: 192.168.88.3:9090
Accept-Encoding: gzip, deflate
Content-Length: 359
Connection: keep-alive

{
    "RoutingCode": "TESIA",
    "SnilsOperator": "135-419-238 52",
    "ra": "1000321282",
    "lastName": "Тестов",
    "firstName": "Тест",
    "middleName": "Тестович",
    "doc": {
        "type": "RF_PASSPORT",
        "series": "1111",
        "number": "111111"
    },
    "mobile": "+7(920)4021351",
    "snils": "229-785-346 20"
}


Нужно сделать такой же запрос с фронта. Пишу такой код:
let ESIAFindAccount = {
        "url": "http://192.168.88.3:9090/API/V0.1/schedule_query/ESIAFindAccount/",
        "data": {
            "RoutingCode": "TESIA",
            "SnilsOperator": "135-419-238 52",
            "ra": "1000321282",
            "lastName": "Тестов",
            "firstName": "Тест",
            "middleName": "Тестович",
            "doc": {
                "type": "RF_PASSPORT",
                "series": "1111",
                "number": "111111"
            },
            "mobile": "+7(920)4021351",
            "snils": "229-785-346 20"
        },
        headers: {
            "Content-Type": "application/json",
            "X-Auth-Token": "xxx"
        }
    };

    function ajax() {
        $.ajax({
            type: 'POST',
            url: ESIAFindAccount.url,
            data: ESIAFindAccount.data,
            headers: ESIAFindAccount.headers,
            success: function (data) {
                console.log(data);
            }
        });
}


Уходит такой запрос:
OPTIONS /API/V0.1/schedule_query/ESIAFindAccount/ HTTP/1.1
Host: 192.168.88.3:9090
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://web-form.loc
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
Access-Control-Request-Headers: content-type,x-auth-token
Accept: */*
Referer: http://web-form.loc/smev_demo
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,bg;q=0.6,vi;q=0.5


Я всякого видел, но чтобы так поменялся запрос - это что-то с чем-то. Откуда OPTIONS? Почему метод POST ушел в заголовки? Куда исчезли заголовки и body?

Кто-нибудь может рассказать про такие чудеса js, и что нужно написать, чтобы отправился запрос именно из первого примера?
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя HellWalk К ответам на вопрос (4)
@HellWalk Автор вопроса
Решение было найдено, пусть и костыльное (хотя со стороны бэка весь js это один костыль)

Код остался таким же, только убрано изменение headers:

function ajax() {
        let ESIAFindAccount = {
            "url": "http://192.168.88.3:9090/API/V0.1/schedule_query/ESIAFindAccount/",
            "data": {
                "RoutingCode": "TESIA",
                "SnilsOperator": "135-419-238 52",
                "ra": "1000321282",
                "lastName": "Тестов",
                "firstName": "Тест",
                "middleName": "Тестович",
                "doc": {
                    "type": "RF_PASSPORT",
                    "series": "1111",
                    "number": "111111"
                },
                "mobile": "+7(920)4021351",
                "snils": "229-785-346 20"
            },
        };

        $.ajax({
            method: 'POST',
            url: ESIAFindAccount.url,
            data: JSON.stringify(ESIAFindAccount.data),
            success: function (data) {
                console.log(data);
            }
        });
    }


Потому что, как оказалось, через js можно отправить POST запрос, но только если не изменять headers. Если что-нибудь добавить в headers - метод запроса сразу изменяется на OPTIONS

Плюс, на беке отключили требование к X-Auth-Token. Для разовой презентации, после которой этот код использоваться не будет - пойдет.
Ответ написан
Комментировать