Почему у Chrome DevTool Network два одинаковых запроса в проекте angular4 aspnetboilerplate? - PullRequest
0 голосов
/ 15 мая 2018

Я обнаружил два одинаковых запроса в сети Chrome Devtool при разработке проекта angular4.Ниже приведен код запроса http: Примечания: приведенный выше код генерируется с использованием nswag.

userApplyLimitAsync(): Observable<GetUserApplyLimitOutput> {
    let url_ = this.baseUrl + "/api/services/app/AElfApplication/UserApplyLimitAsync";
    url_ = url_.replace(/[?&]$/, "");

    let options_ = {
        method: "post",
        headers: new Headers({
            "Content-Type": "application/json",
            "Accept": "application/json"
        })
    };

    return this.http.request(url_, options_).flatMap((response_) => {
        return this.processUserApplyLimitAsync(response_);
    }).catch((response_: any) => {
        if (response_ instanceof Response) {
            try {
                return this.processUserApplyLimitAsync(response_);
            } catch (e) {
                return <Observable<GetUserApplyLimitOutput>><any>Observable.throw(e);
            }
        } else
            return <Observable<GetUserApplyLimitOutput>><any>Observable.throw(response_);
    });
}

protected processUserApplyLimitAsync(response: Response): Observable<GetUserApplyLimitOutput> {
    const status = response.status;

    let _headers: any = response.headers ? response.headers.toJSON() : {};
    if (status === 200) {
        const _responseText = response.text();
        let result200: any = null;
        let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
        result200 = resultData200 ? GetUserApplyLimitOutput.fromJS(resultData200) : new GetUserApplyLimitOutput();
        return Observable.of(result200);
    } else if (status !== 200 && status !== 204) {
        const _responseText = response.text();
        return throwException("An unexpected server error occurred.", status, _responseText, _headers);
    }
    return Observable.of<GetUserApplyLimitOutput>(<any>null);
}

Ниже приведен код вызова функции userApplyLimitAsync():

this._withdrawService.userApplyLimitAsync()
    .subscribe((result) => {
            this.withdrawActive = result.isSucceed;
        });

userApplyLimitAsync() является членом WithdrawServiceProxy, а _withdrawService является экземпляром WithdrawServiceProxy.Когда я вызываю userApplyLimitAsync(), почему он создает два одинаковых запроса? Два одинаковых запроса Первый Второй

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Есть 2 запроса, но между ними существует большое различие.

  1. Первый запрос, который вы видите, это OPTIONS запрос
  2. Второй: GET/POST/PUT/DELETE(Какой бы запрос вы ни сделали)

OPTIONS запрос должен проверить, разрешает ли СЕРВЕР операции запроса, т. Е. GET/POST/PUT/DELETE (какой запрос вы сделали).

Они определены на сервереat as
Ex 'Access-Control-Allow-Methods', 'POST'.

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

0 голосов
/ 15 мая 2018

Стандарт общего доступа к источникам работает, добавляя новые заголовки HTTP, которые позволяют серверам описывать набор источников, которым разрешено читать эту информацию с помощью веб-браузера.

Кроме того, для методов запроса HTTP, которые могут вызывать побочные эффекты на данных сервера (в частности, для методов HTTP, отличных от GET, или для использования POST с определенными типами MIME), спецификация предписывает браузерам preflight запрос, запрашивающий поддерживаемые методы у сервера с помощью HTTP OPTIONS метода запроса, а затем, после «одобрения» от сервера, отправляет фактический запрос с фактическим методом HTTP-запроса.

Серверы также могут уведомлять клиентов о необходимости отправки «учетных данных» (включая файлы cookie и данные HTTP-аутентификации) с запросами.

0 голосов
/ 15 мая 2018

Не тот же запрос. Даже не тот же самый глагол HTTP. Вы должны исследовать HTTP-глаголы, в основном OPTIONS и POST.

...