首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >请求http.GET时发送的Angular2选项方法

请求http.GET时发送的Angular2选项方法
EN

Stack Overflow用户
提问于 2016-04-01 18:07:38
回答 2查看 97K关注 0票数 51

我正在尝试向我的angular2应用程序添加basic authentification

代码语言:javascript
复制
public login() {
    // Set basic auth headers
    this.defaultHeaders.set('Authorization', 'Basic ' + btoa(this.username + ':' + this.password));

    console.log('username', this.username)
    console.log('password', this.password)
    console.log(this.defaultHeaders)

    // rest is copy paste from monbanquetapiservice
    const path = this.basePath + '/api/v1/development/order';        

    let req = this.http.get(path, { headers: this.defaultHeaders });
    req.subscribe(
        _ => { },
        err => this.onError(err)
    );
}

我希望看到的是一个带有我放入的Authorization头的GET请求。

但我首先看到的是一个包含以下标头的选项

代码语言:javascript
复制
OPTIONS /api/v1/development/order HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36
Access-Control-Request-Headers: authorization, content-type
Accept: */*
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6,fr;q=0.4

由于我的服务器不允许在此url上使用选项,因此我收到一个错误。

我知道有些方法,比如PUT或POST,会先发送一个OPTIONS方法来预检请求,但GET并非如此。

为什么angular2的http会先发送一个选项?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 18:21:38

这就是CORS的工作方式(当使用跨域请求时)。使用CORS,远程Web应用程序(这里是具有域mydomain.org的应用程序)选择是否可以通过一组特定的标头来处理请求。

CORS规范区分了两种不同的用例:

  • Simple请求。如果我们使用HTTP GET、HEAD和POST方法,则适用此用例。对于POST方法,只支持具有以下值的内容类型: text/plain、application/x-www-form-urlencoded和multipart/form-data.
  • Preflighted请求。当“简单请求”用例不适用时,将发出第一个请求(使用HTTP OPTIONS方法),以检查在跨域请求的上下文中可以执行哪些操作。

发送OPTIONS请求的不是Angular2,而是浏览器本身。它与Angular无关。

更多细节,你可以看看这篇文章:

票数 83
EN

Stack Overflow用户

发布于 2016-04-01 18:10:53

Why am I getting an OPTIONS request instead of a GET request?

这是由浏览器本身生成的CORS印前检查请求。

另请参阅

服务器需要配置为支持CORS请求,只有这样,浏览器才会在OPTIONS请求之后发送实际的GET请求。

另请参阅

Access-Control-Allow-Credentials

指示当credentials标志为true时,是否可以公开对请求的响应。当用作对印前检查请求的响应的一部分时,它指示是否可以使用凭据发出实际请求。请注意,简单的GET请求不会预先处理,因此如果对具有凭据的资源发出请求,如果此标头未随资源一起返回,则浏览器将忽略该响应,并且不会将其返回到web内容。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36353532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档