【问题标题】:How do I remove headers from a $http.get request and also add "application/json" and "text/plain" to "Accept"如何从 $http.get 请求中删除标头,并将“application/json”和“text/plain”添加到“Accept”
【发布时间】:2015-09-27 19:02:45
【问题描述】:

我是 angularjs 的新手,我正在尝试向现有的 angular js 应用程序添加一些新功能。 所有现有的调用都包含在复杂的逻辑中,所以我想我会直接打电话。这是我的通话代码:

当从 angularjs 代码对 api 进行现有调用时,它们可以工作,并且在下图的顶部有以下标题(用红色文本标记为“Works”)。我的新调用添加了 Access-Control-Request-Headers 和 Access-Control-Request-Method,如下图的下半部分(用红色文本标记为“失败”)。

当我查看 Chrome 的控制台时,我看到我的新请求出现以下错误:XMLHttpRequest cannot load http://localhost/blablabla/v1/login.json。 Access-Control-Allow-Headers 不允许请求头域 Authorization。

我还缺少请求中“Accept”标头中的“application/json”和“text/plain”。如何将这些添加到“Accept”并摆脱“Access-Control-Request-Headers”和“Access-Control-Request-Method”?

【问题讨论】:

  • 你不能稍微挖掘一下你提到的“复杂逻辑”来检查它是如何完成的吗?即使你让它工作恕我直言,你也应该遵循你尝试扩展的应用程序中的现有标准。

标签: javascript angularjs xmlhttprequest


【解决方案1】:

请在下面找到设置 $http 请求选项的示例:

 var request = {
   method: 'POST',
   url: 'http://example.com',
   headers: {
     'Accept': 'application/json'
   },
   data: { test: 'test' }
 }

 $http(request ).then(function(){...}, function(){...});

【讨论】:

    【解决方案2】:

    我还缺少请求中“Accept”标头中的“application/json”和“text/plain”。如何将这些添加到“接受”

    浏览器正在生成preflight OPTIONS request。当它随后发出 GET 请求并获得服务器的许可时,您应该期望看到您想要的标头。

    (您真正的问题很可能是您没有设置服务器以正确响应预检请求。)

    还要去掉“Access-Control-Request-Headers”和“Access-Control-Request-Method”吗?

    首先要删除需要预照明请求的条件:您不能。这些是由浏览器在发出预检请求时自动添加的。

    【讨论】:

    • 来自同一应用程序的其他调用成功地调用了 webapi。所以服务器不会是问题。我新添加的电话和工作电话之间的唯一区别是我指出的事情。我需要修改我的呼叫,使其与其他呼叫一样。
    • @DotNetGuy — 所以不同之处在于您正在自定义请求标头……这可以触发预检请求。其他调用是否触发了预检请求?
    • 我还尝试在不指定标头的情况下发送 get 请求(即不传入配置变量)。所以 $http.get 请求只指定了 2 个参数,url 和参数 json 对象。这导致了同样的错误。来自 angularjs 应用程序的其他 get 调用也使用 $http.get 但不传递“Access-Control-Request-Headers”和“Access-Control-Request-Method”,但传递“application/json”和“text/ “接受”标题中的普通”(我的电话没有)。
    • @DotNetGuy — 它也通过了*/*,那么有什么问题?
    • 问题是调用没有到达 API,我收到这条消息“XMLHttpRequest cannot load localhost/blablabla/v1/shops/select.json.Request header field Authorization is not allowed by Access-Control-Allow-Headers.”在 Chrome 的控制台中。
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多