Angular CORS 适用于 GET 但不适用于 DELETE
Posted
技术标签:
【中文标题】Angular CORS 适用于 GET 但不适用于 DELETE【英文标题】:Angular CORS works for GET but not for DELETE 【发布时间】:2015-01-04 20:31:42 【问题描述】:我有一个 Angular 应用程序进行跨源调用。所有的 GET 调用都很好用。但 DELETE 调用会引发错误:
XMLHttpRequest cannot load http://my.url.com:8080/api/invoices/12768. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
在后端,我将 JAX-RS 与 Glassfish 4.1 和 Java 8 一起使用。我正在创建 ResponseBuilder,如下所示:
ResponseBuilder responseBuilder = Response
.status(status)
.type(MediaType.APPLICATION_JSON)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods", "POST, GET, DELETE")
.header("Access-Control-Max-Age", "1209600")
.allow("OPTIONS");
在 Angular 中,我正在像这样进行服务调用:
$http.delete(requestUrl)
.success(function (data, status, headers, config)
deferred.resolve(data);
).error(function (data, status, headers, config)
deferred.reject(status);
);
问题是,这很好用:
$http.get(requestUrl)
.success(function (data, status, headers, config)
deferred.resolve(data);
).error(function (data, status, headers, config)
deferred.reject(status);
);
知道为什么 GET 可以工作,但不能 DELETE 吗?
编辑:
另外,我知道这不是服务器端,因为如果我在本地计算机上通过Advanced Rest Client 运行删除调用,DELETE 就可以完美运行。
编辑 2:
请求标头
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko)
Chrome/ipaddress Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6
Cookie: treeForm_tree-hi=treeForm:tree:applications
响应标头
Server: GlassFish Server Open Source Edition 4.1
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8)
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, DELETE
Access-Control-Max-Age: 1209600
Allow: OPTIONS
Content-Type: application/json
Date: Fri, 07 Nov 2014 23:39:10 GMT
内容长度:0
这些是来自正在工作的 Advanced Rest Client 的标头
【问题讨论】:
你在什么浏览器上运行这个? 请求和响应中的HTTP详细信息。 铬。 “请从请求和响应中获取 HTTP 详细信息”是什么意思? 在 chrome 中从网络或您发送它的任何地方请求/响应。 【参考方案1】:好的,显然 Angular 从标题中剥离了内容类型。使用这个作品:
$http.delete(url:request,headers:'Content-Type':'application/json')
【讨论】:
以上是关于Angular CORS 适用于 GET 但不适用于 DELETE的主要内容,如果未能解决你的问题,请参考以下文章
Go Restful API:CORS 配置适用于 React 但不适用于 Angular
net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义
CORS 中间件适用于 app.get 但不适用于 app.post
我在 Angular 中使用动态编译器,但它只适用于视图引擎,但不推荐使用视图引擎