即使存在所有CORS标头,也会出现跨源资源共享问题
即使我已经通过以下提供的CORS标头添加了我的服务响应:
resp.setContentType("application/json"); resp.addHeader("Access-Control-Allow-Origin", "*"); resp.addHeader("Access-Control-Allow-Credentials", "true"); resp.addHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS"); resp.addHeader("Access-Control-Allow-Headers", "Origin,accept,content-type"); resp.flushBuffer();
在尝试通过我的AngularJS前端访问服务中的一些POST Web方法时,我仍然在控制台中出现以下错误。
XMLHttpRequest cannot load http://192.***.*.***:8080/abc/def/search/vehicleManufacturer. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.***.*.***:8085' is therefore not allowed access.
但是在同一个类中,一些没有任何有效负载的POST方法完全响应。 有什么建议 ?
编辑———>
下面是我用于调用web方法的AngularJS客户端屏幕代码: –
getVehicleModel : function(searchData,$scope){ $http({ method:'POST', url:'http://192.169.*.***:8085/abc/def/search/vehicleModel', dataType:'jsonp', data:searchData }). success(function(data){ console.log("vehicle model") $scope.vehicleModel = data.Response; }); },
我认为这里的问题是CORS中的Preflighted Requests 。
来自Mozilla文档,
与简单请求(如上所述)不同,“预检”请求首先通过OPTIONS方法向另一个域上的资源发送HTTP请求,以便确定实际请求是否可安全发送。 跨站点请求是这样预检的,因为它们可能对用户数据有影响。 特别是,如果出现以下情况,请求会被预检:
它使用GET,HEAD或POST以外的方法。 此外,如果POST用于发送除Content-Type以外的Content-Type的请求数据
- 应用程序/ x-WWW窗体-urlencoded,
- 多部分/格式数据
- 纯文本/
例如,如果POST请求使用application / xml或text / xml将XML有效负载发送到服务器,则该请求将被预检。
它在请求中设置自定义标头(例如,请求使用诸如X-PINGOTHER之类的标头)
如上所述,即使你正在做一个简单的POST请求,你的请求中的Content-Type是application/json
,它与上面提到的3种类型不同,所以它被认为是一个Preflight请求,并且之前触发了一个OPTIONS请求你的实际POST请求。
你可以通过在你的servlet中实现doOptions
来解决这个问题,只需在那里添加标题就可以了:)
由于您正在发送跨源ajax请求并使用此GET请求指定Authorization标头,因此正在进行预检(OPTIONS)。
另外(这不会导致问题)我建议删除contentType选项。 这在GET请求的上下文中没有意义。 GET请求不应包含任何内容。 所有数据都应包含在查询字符串中,或者可能包含在标题中。
授权标头不会与OPTIONS一起发送。 您必须在服务器端确认它,然后浏览器将发送基础GET。 有关CORS的更多信息, 请访问https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS 。
- 尝试使用ng-file-upload上传Spring中的许多文件时,清单
- Spring MVC – AngularJS – 文件上传 – org.apache.commons.fileupload.FileUploadException
- 如何在angularjs中发送多个FIles以及表单数据
- 如何使用angular js spring mvc上传多部分文件
- spring安全吃angularjs POST请求
- 运行grunt和tomcat服务器的Web App(Spring,Angular,Grunt,Maven,Tomcat)
- 部署依赖于rest api的单页面应用程序有哪些技巧?
- 是否可以将AngularJs包含到使用Gradle的项目中
- 通过Javascript缓存与在Server中设置HTTPResponse头之间有什么区别?