当前位置: 首页 > 知识库问答 >
问题:

角度2-飞行前的响应具有无效的HTTP状态代码401

拓拔辰钊
2023-03-14



我知道这里已经有很多相同的解决问题,
但不幸的是,它们都没有帮助我:-(

这里是我的问题:
我尝试从本地主机连接到服务器上的REST服务。使用FF REST插件可以正常工作,但我的应用程序会导致以下错误:

  • 选项 http://.../my_REST_Service/ 401 (未经授权)
  • XMLHttpRequest 无法加载 http://.../my_REST_Service/。
    印前检查的响应具有无效的 HTTP 状态代码 401

如何获取我想要的数据:

@Injectable()
export class ModelsComponent implements OnInit {

    private restRoot = 'http://.../my_REST_Service';
    private data;

    constructor(private http: Http) { }

    ngOnInit() {
        this.getModels().subscribe(res => {
            this.data = res; 
            console.log(this.data);
        });
    }

    authHeaders() {
        let username: string = 'xxxx';
        let password: string = 'xxxx';

        let token: string = btoa(username + ":" + password);

        let headers: Headers = new Headers();
        headers.append('Access-Control-Expose-Headers', 'Authorization');
        headers.append('Authorization', 'Basic ' + token);
        headers.append("Access-Control-Allow-Origin", "http://localhost:4200/");
        headers.append("Access-Control-Allow-Methods", "*");
        headers.append("Access-Control-Allow-Headers", "Accept,Accept-Charset,Accept-Encoding,Accept-Language,Authorization,Connection,Content-Type,Cookie,DNT,Host,Keep-Alive,Origin,Referer,User-Agent,X-CSRF-Token,X-Requested-With");
        headers.append("Access-Control-Allow-Credentials", "true");

        return headers;
    }

    getModels(): Observable<any> {
        return this.http.get(this.restRoot, {
                    headers: this.authHeaders(), 
                    withCredentials: true        <- from a similar issue
               }).map(res => res.json());
    }
}

我的服务器配置如下:

Header set Access-Control-Allow-Origin "http://localhost:4200"
Header set Access-Control-Allow-Headers "Accept,Accept-Charset,Accept-Encoding,Accept-Language,Authorization,Connection,Content-Type,Cookie,DNT,Host,Keep-Alive,Origin,Referer,User-Agent,X-CSRF-Token,X-Requested-With"
Header set Access-Control-Allow-Methods "*"
Header set Access-Control-Allow-Credentials "true"   
Header set Access-Control-Expose-Headers "Authorization"       <- from a similar issue

我知道还有其他相同/相似的已解决问题。但是我仍然不知道该做什么或者怎么做。如果有人能帮我写代码,我会非常感激!!

共有3个答案

司寇昱
2023-03-14

服务器端,如果使用Node.js,可以考虑授权所有选项请求,这样浏览器就不需要验证来检查哪些方法在server/REST API上被授权了。

考虑如下代码:

if (req.method === 'OPTIONS') {
    res.status(200).end();
} else {
    next();
}
子车超英
2023-03-14

浏览器在执行 HttpGet 之前执行 OPTIONS 请求,您需要添加一个与 HttpGet 具有相同路由的终结点,使其成为 HttpOptions 请求,从该终结点中删除身份验证并从中返回 200 OK,这应该可以解决您的问题。

龚振濂
2023-03-14

“我的服务器是这样配置的”-这基本上是无关紧要的。查看错误消息:“飞行前的响应具有无效的HTTP状态代码401”

它没有提到任何你提到的访问控制允许的东西。

  • 浏览器正在发出选项请求,询问是否允许跨来源请求
  • 回复说“您的用户名和密码错误”

由于浏览器尚未收到发出跨域请求的权限:它尚未发送用户名和密码。

您需要在服务器上找到执行授权的代码,并从该测试中排除选项请求。任何人都应该能够提出选项请求,而不仅仅是拥有用户名和密码的人。

 类似资料:
  • 我正在尝试使用Ajax进行REST调用(POST)。这是我的AJAX代码 最初,我得到了这个错误:XMLHttpRequest无法加载http://localhost:port/service/myservice。对preflight请求的响应未通过访问控制检查:请求的资源上没有“access-control-allow-origin”标头。因此不允许访问源“null”。响应的HTTP状态代码为4

  • 我使用作为服务器端的Spring-boot并提供一个虚拟服务进行测试 其中我的serviceCaller.java=

  • 问题内容: 我知道有很多这样的问题,但是我所见的问题都没有解决。我已经使用了至少3个微框架。所有这些都无法执行简单的POST,它应该将数据返回: angularJS客户端: SlimPHP服务器: 我已启用CORS,并且GET请求有效。html使用服务器发送的JSON内容进行更新。但是我得到了 XMLHttpRequest无法加载 http:// localhost:8080 / server.p

  • 我知道有很多这样的问题,但我见过没有一个能解决我的问题。我已经使用了至少3个微框架。它们在执行一个简单的POST时都失败了,该POST应该返回数据: angularJS客户端: SlimPHP服务器: 我已经启用了CORS,并获得了工作请求。html使用服务器发送的JSON内容进行更新。然而我得到了一个 每次我试着用POST。为什么?

  • 所有人。我是Angular 2和Spring框架的新手。我正在尝试一个带有授权头(基本身份验证)的简单get请求。 我使用的是Spring Boot(1.2.6.Release),这也可能是相关的。我的CORS配置如下所示。 帮帮我,我不知道我错过了什么...我已经查了很多帖子,但都没找到。

  • 问题内容: 大家。我是Angular 2和Spring框架的新手。我正在尝试使用授权标头(基本auth)进行简单的get请求。 我正在使用Spring Boot(1.2.6.RELEASE),这也可能是相关的。我的CORS配置如下所示。 这是客户端的外观 我不断得到: XMLHttpRequest无法加载 http:// localhost:8080 / api / login?username