【问题标题】:AngularJS2 adding headers to http post doesn't workAngularJS2向http post添加标题不起作用
【发布时间】:2017-04-23 15:46:04
【问题描述】:

我正在尝试将标题添加到我的http 发布请求中,如下所示

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';

@Injectable() 
export class UserService extends ServiceBase {

    apiUrl: string; 
    private contentHeaders = new Headers();

    constructor(private http: Http) {
        super();
        this.apiUrl = appConfig.apiBaseUrl + '/users';
    }

    login(user: User) {
        this.contentHeaders.append('Accept', 'application/json');
        this.contentHeaders.append('Content-Type', 'application/json');
        return this.http.post(
            this.apiUrl+'/sign_in', 
        JSON.stringify({user: user}),
            {headers: this.contentHeaders}
        );
    }
 }

Chrome DevTools 中显示的标头:

OPTIONS /api/v1/users/sign_in HTTP/1.1 Host: offers2win.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Access-Control-Request-Method: POST Origin: http://evil.com/ User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 Access-Control-Request-Headers: access-control-allow-credentials, content-type Accept: */* Referer: http://localhost:3000/? Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8

但在 Chrome 开发工具的网络面板中看不到这些标头。我在这里错过了什么。

【问题讨论】:

    标签: http angular cors


    【解决方案1】:

    试试这个

      constructor(private http: Http) { }
    
      login(username: any, password: any) {
        let body = JSON.stringify({ "email" : username, "password" : password });
        let headers = new Headers({"Content-Type": "application/json"});
        let options = new RequestOptions({headers: headers});
        return this.http.post(APIUrl+"/login", body, options).map(res => res.json());
      }
    

    【讨论】:

    • 还是一样。 Access-Control-Request-Headers:content-type :(
    • 服务器(POST 请求被发送到)需要在其响应中包含 Access-Control-Allow-Headers 标头(等​​)。将它们放入来自客户的请求中没有任何效果。这是因为由服务器指定它接受跨域请求(并且它允许 Content-Type 请求标头等)——客户端无法自行决定给定服务器应该允许 CORS。
    • 我已经在 Chrome 中安装了 CORS 扩展。还是不行。
    • 我可以通过添加两个标题 Content-TypeAccept 来使用 post man 来实现它
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 2016-06-25
    • 2020-01-13
    • 2013-09-15
    • 2017-12-20
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多