繁体   English   中英

AngularJS对PUT的无效CORS请求

[英]Invalid CORS request for PUT with AngularJS

我的Spring应用程序中有一个映射如下:

@PutMapping(path="/test/{id}")
public @ResponseBody Shop putTest(@PathVariable("id") long id,
                                  @RequestBody User user {
....

尝试通过Angular调用此终结点时:

$http({
   method: 'PUT',
   url: 'https://localhost:8000/api/test',
   data: senddata,
   params:{'id':id},
   headers: {
     "Content-Type": "application/json; charset=utf-8"
   }
})

在此处输入图片说明

我的请求是否有问题,如果可以,该如何解决?

您的后端必须知道请求来自何处。 只是为了测试该请求,您可以指定请求的来源,只需添加该注释即可。

@CrossOrigin(origins = "http://localhost:9000")
@PutMapping(path="/test/{id}")
public @ResponseBody Shop putTest(@PathVariable("id") long id,
                                  @RequestBody User user {
....

我希望它有用

大概是,您的Spring应用程序在与您的角度应用程序不同的端口上提供服务? 对于浏览器,这被视为不同的来源,因此请求将失败,除非服务器的响应包含Access-Control-Allow-Origin标头。 您将需要相应地配置spring应用。

这是浏览器的“相同来源策略”,可再次保护用户跨站点的请求伪造。 例如,想象一下,一个邪恶的策划者创建了一个看似无辜的网站,命名为evil.com,该网站将AJAX请求的负载释放到各种银行服务器,希望您登录其中一个(即,您有未过期的Cookie)。 除非银行的服务器的访问控制标头设置为允许来自任何地方的请求(不应),否则请求将失败。 GET请求实际上将成功,因为浏览器直到从响应中获取标头才知道它不应该发送该请求,但是浏览器将停止JS代码读取响应,因此可以。 对于POST和PUT等“不安全”请求,浏览器首先会执行飞行前请求(使用OPTIONS方法)以获取标头。 如果加载页面的域未包含在允许的来源列表中,则不会发出不安全的请求。

当未正确定义Origin时,这是正常行为。

查看服务器端设置。 浏览器在您的PUT请求之前发送OPTIONS请求。

阅读有关Access-Control-Request-*标头的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM