gpt4 book ai didi

rest - AngularJS $http POST withCredentials 失败,请求正文中有数据

转载 作者:行者123 更新时间:2023-12-04 22:55:13 25 4
gpt4 key购买 nike

AngularJS 使用 REST 对服务器端进行身份验证,并获取 JSESSIONID cookie。在下一步中,我尝试使用 REST 从服务器端获取一些 JSON 数据以及在上一步中获得的 session cookie。这是客户端代码:

getSomeJSONDataFromServer:function() {
var deferred = $q.defer();
$http({
method: 'POST',
withCredentials: true,
url: "http://domain.name/app/someURL",
headers:{
'Accept':'application/json',
'Content-Type':'application/json; charset=utf-8',
'Access-Control-Request-Headers': 'X-Requested-With, content-type, accept, origin, withcredentials'
}
})
.success(function(data, status, headers, config) {
// handle data
})
.error(function(data, status, headers, config) {
// handle error
});
return deferred.promise;
}

上面的代码工作正常:

CORS $http request without body

当我在上面的 POST 请求正文中发送一些数据时,问题就开始了。

...
$http({
method: 'POST',
withCredentials: true,
url: "http://domain.name/app/someURL",
headers:{
'Accept':'application/json',
'Content-Type':'application/json; charset=utf-8',
'Access-Control-Request-Headers': 'X-Requested-With, content-type, accept, origin, withcredentials'
},
data: '{}'
})
.success(...

上述代码在 prelight 请求中失败:

CORS $http request with body fails!

看起来服务器开始了一个新的 session ,因为由于某种原因没有发送 session cookie。无论如何,我觉得我错过了一些非常简单的东西,一些标题或类似的东西......任何想法表示赞赏。提前致谢。

最佳答案

阿米尔,

请允许我帮助您和其他人清楚地了解在处理 CORS 时的期望,例如:

索引:

  • 简单的 CORS 版本
  • 预检 CORS 版本
  • 凭据请求

简单的 CORS 版本

  1. 您可以使用 GET、HEAD 或 POST:
    • 在任何方法情况下,您不能设置自定义 header
    • 您始终可以让服务器端通过 Access-Control-Allow-Origin header 限制域访问。
  2. 如果 POST 有请求数据:
    • 内容类型必须以下之一:
      • 应用程序/x-www-form-urlencoded
      • 多部分/表单数据
      • 文本/html

This SIMPLE version clearly IS NOT your case...

预检 CORS 版本

  1. 您可以使用 GET、HEAD 或 POST:
    • 在任何方法情况下,您可以设置自定义 header
    • 您始终可以让服务器端通过 Access-Control-Allow-Origin header 限制域访问。
  2. 如果 POST 有请求数据:
    • 内容类型可能如下:
      • 应用程序/x-www-form-urlencoded
      • 多部分/表单数据
      • 文本/html
    • 内容类型也可以是其他类型:
      • 应用程序/json
      • 应用程序/xml
      • 文本/xml
      • 等等

This PREFLIGHTED version clearly IS your case...

带有凭据的请求

  1. 如果您使用cookies 进行调用,您需要在请求中设置以下参数部分:
    • withCredentials = true

Requests with Credentials clearly IS your case as well...

关于rest - AngularJS $http POST withCredentials 失败,请求正文中有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com