我知道浏览器首先向服务器发送一个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工作正常。任何帮助都会很棒:)。感谢
答案 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身份验证数据)应与之一起发送 请求。