Angular2 Http.get Отправить два запроса

У меня есть простая служба аутентификации, я использую токен jwt, и после того, как мне понадобится информация о пользователе для проверки заголовка авторизации и отправки конечной точки API запроса, но угловой запрос 2 отправит первый запрос Пустой ключ заголовка, но второй правильный заголовок позвольте мне объяснить

Сетевые операции http://pasteboard.co/c3wmFZvtJ.jpg

Неверный заголовок http://pasteboard.co/c3wDdFxMy.jpg

Правильный заголовок http://pasteboard.co/1cKy9EHDy.jpg

Моя функция Http.Get

getUsers(): Observable<User[]> {
    // Authorization Tokeni Ayarlanıyor
    let headers = new Headers({ 'Authorization': this.authenticationService.token });
    let options = new RequestOptions({ headers: headers });
    // Kullanıcı Headeri Gönderiliyor
    return this.http.get('http://localhost/Hesap/Detay', options)
        .map((response: Response) => 
            response.json().detay
     ); 
}

я называю эту функцию здесь

ngOnInit() {
    this.userService.getUsers()
        .subscribe(users => {
            this.users = users;
        });
}

Php Side

public function Detay(){
    echo $this->headers["authorization"];
    if(!isset($this->headers["authorization"]) || empty($this->headers["authorization"])){
        echo json_encode(array("Hata" => "Header Yok"));
    }else{
        $token = explode(" ", $this->headers["authorization"]);
        $user = JWT::decode(trim($token[0],'"'));
        $this->load->model("auth_model");
        if($this->auth_model->checkUser($user->id, $user->KullaniciAdi) !== false)
            {
                $this->load->model("user_model");
                $detay = $this->user_model->get($user->id, $user->KullaniciAdi);
                echo json_encode(
                    array( 
                            "detay"=> $detay
                    )
                );
            }
        }
}

Второй заголовок может отображать токен http://pasteboard.co/c3C6ed2k7.jpg

И теперь ЭТО ПРОБЛЕМА, ТОЛЬКО РЕЖИМ РАЗРАБОТКИ, если я создаю Prod Project, отправьте один запрос

1 ответ

Решение

Похоже, что первый запрос OPTIONS запрос необходим из-за CORS,

Если это так, то в этом нет ничего плохого. Браузер должен сделать предварительный запрос, чтобы проверить, можете ли вы вызвать API и разрешены ли требуемые заголовки.

Заголовок Access-Control-Request-Headers проверяет, можете ли вы отправить authorization Заголовок в вашем запросе.

Заголовок Access-Control-Request-Method проверяет, можете ли вы отправить GET запрос.

Предварительный запрос выполняется только в том случае, если домен клиента отличается от домена API.

Посмотрите на эту ссылку.

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