Angularjs $ http发送OPTIONS而不是PUT

时间:2016-10-03 18:38:54

标签: angularjs http put

我知道浏览器首先向服务器发送一个OPTIONS。但是我在Angularjs 1.5中面对这件事。我试图发送PUT请求并发送一个OPTIONS。为什么这很奇怪?,因为我使用应用程序测试我的所有网址,网址使用PUT罚款。

let fd = new FormData()
let d
for (d in $scope.uploadAutos) {
  fd.append(d, $scope.uploadAutos[d])
}

$http({
     method: 'PUT',
    url: `http://sitio.api.com/vehiculo/${parseInt($routeParams.id, 10)}`,
    data: fd,
    headers: { 'Content-Type': 'undefined' }
   }).then(success => {
     console.log(success)
   }, error => {
     console.log(error)
  }
)
到目前为止,这是我一直在做GET和POST请求的方式,这很好......但是PUT ... mmm有些东西不起作用。后端适用于上述内容,使用rest api应用程序来测试我的所有url,PUT url工作正常。任何帮助都会很棒:)。感谢

2 个答案:

答案 0 :(得分:3)

理想情况下,您会看到两个请求 - OPTIONS请求,即飞行前请求。这是为了验证您的Cross Origin请求标头。

验证完成后,您的客户端将能够发出实际的POST / PUT请求。如果您的飞行前请求失败,则表示您的服务器上未正确设置CORS请求标头。

需要设置以下标题:

Access-Control-Allow-Origin
Access-Control-Allow-Methods ("GET, POST, PUT, DELETE, OPTIONS")
Access-Control-Allow-Headers
Access-Control-Max-Age

答案 1 :(得分:1)

这就是我在寻找飞行前的那个词!大声笑。好的,我已经把事情搞定了。第一。我身边缺乏信息。所以我意识到问题不是有角度的,而不是在我的后端,问题是在苗条的PHP文件和我的知识。当你将PUT或DELETE用于map函数时,你必须添加OPTIONS,这是因为

Mozilla有答案

  

跨域资源共享标准通过添加新HTTP来工作   允许服务器描述原始集合的标头   允许使用Web浏览器读取该信息。另外,   对于可能对用户数据造成副作用的HTTP请求方法(in   特别是,对于GET以外的HTTP方法,或者对于POST使用   某些MIME类型),规范要求浏览器   “预检”请求,从服务器请求支持的方法   使用HTTP OPTIONS请求方法,然后,在“批准”时   服务器,使用实际的HTTP请求发送实际请求   方法。服务器还可以通知客户端是否“凭据”   (包括Cookie和HTTP身份验证数据)应与之一起发送   请求。