首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular2和Tomcat8: CORS自动发送OPTION请求而不是POST

Angular2是一种流行的前端开发框架,而Tomcat8是一个常用的Java Web服务器。在使用Angular2与Tomcat8进行跨域资源共享(CORS)时,当浏览器发起跨域请求时,会自动发送一个OPTIONS请求而不是POST请求。

CORS是一种机制,允许在一个域中加载来自另一个域的资源。当浏览器发起跨域请求时,会先发送一个OPTIONS请求,该请求用于预检测服务器是否允许实际的跨域请求。服务器在收到OPTIONS请求后,会返回一组响应头,指示是否允许实际的跨域请求。

在Angular2中,可以通过设置HTTP请求的头部来处理CORS。可以使用Angular2的HttpClient模块来发送HTTP请求,并在请求头中设置相应的CORS参数。例如,可以设置"Access-Control-Allow-Origin"头部来指定允许跨域访问的域名。

在Tomcat8中,可以通过配置web.xml文件来处理CORS。可以在web.xml文件中添加以下配置:

代码语言:xml
复制
<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

这样配置后,Tomcat8会自动处理CORS,并在收到OPTIONS请求时返回相应的响应头。

CORS的自动发送OPTIONS请求而不是POST请求的优势在于,可以在实际发送跨域请求之前,先进行预检测,减少了不必要的请求和响应,提高了性能和安全性。

关于CORS的应用场景,它适用于任何需要在不同域之间进行资源共享的情况,例如前后端分离的Web应用、跨域API调用等。

对于腾讯云的相关产品和产品介绍链接地址,可以参考以下内容:

  • 腾讯云COS(对象存储):提供安全、稳定、低成本的云端存储服务。详情请参考:腾讯云COS
  • 腾讯云CDN(内容分发网络):加速内容分发,提高用户访问速度和体验。详情请参考:腾讯云CDN
  • 腾讯云API网关:提供灵活、可扩展的API管理服务,方便构建和管理API。详情请参考:腾讯云API网关
  • 腾讯云云服务器(CVM):提供弹性、安全、可靠的云端服务器。详情请参考:腾讯云云服务器

以上是关于Angular2和Tomcat8中CORS自动发送OPTIONS请求而不是POST请求的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django 跨域访问POST请求需预先发送option请求问题处理方案

跨域访问POST请求需预先发送option请求问题处理方案 实践环境 Win 10 Python 3.5.4 Django-2.0.13.tar.gz 官方下载地址: https://www.djangoproject.com.../download/2.0.13/tarball/ 问题描述 使用POST请求访问Django后端API时自动发送option请求,然后才执行POST请求 原因分析 跨域资源共享(CORS)机制导致。...浏览器将CORS请求分成两类:简单请求(simple request)非简单请求(not-so-simple request)。 只要同时满足以下两大条件,就属于简单请求,否则就是非简单请求。...),并且是非简单请求,就会触发CORS的预检请求(preflight);"预检"请求用的请求方法是OPTIONS,如果请求OK,才会再次发送目标操作请求。...,发送第一个OPTION请求往后24小时内不再发送OPTION请求

1.1K30

【安全】899- 前端安全之同源策略、CSRF CORS

SOP 与 ajax 对于 ajax 请求,在获得数据之后你能肆意进行 js 操作。这时候虽然同源策略会阻止响应,但依然会发出请求。因为执行响应拦截的是浏览器不是后端程序。...不过可以防范 CSRF 的例外还是有的,浏览器并不是让所有请求发送成功,上述情况仅限于简单请求,相关知识会在下面 CORS 一节详细解释。...不是!是否记得 SOP 限制了 cookie 的命名区域,虽然请求自动带上 cookies,但是攻击者无论如何还是无法直接获取 cookie 的内容本身。...浏览器会在真正请求发送 OPTION 方法的请求向服务器询问当前源是否符合 CORS 目标,验证通过后才会发送正式请求。...CORS 与 cookie 与同域不同,用于跨域的 CORS 请求默认不发送 Cookie HTTP 认证信息,前后端都要在配置中设定请求时带上 cookie。

1.4K10
  • 跨源资源共享(CORS

    当前端发起请求到后端,这个时候发送的首先是 option 请求不是真正的请求 后端拿到 option 请求后先判断有没有资格(权限),如果没有就会报错;如果有,则会继续请求你真正发起的请求 一句话总结...origin(域,协议和端口),这样浏览器可以访问加载这些资源 CORS 还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的"预检"请求 在预检中,浏览器发送的...Headers 中标示有 HTTP 方法真实请求中会用到的头 详细 CORS 标准新增了一组 HTTP Headers 字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源 另外,规范要求,对那些可能对服务器数据产生副作用的...HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request...),从而获知服务端是否允许该跨源请求 服务器确认允许之后,才发起实际的 HTTP 请求 在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies HTTP 认证相关数据

    49530

    springmvc【问题1】跨域

    它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 为什么说它优雅呢? 整个CORS通信过程,都是浏览器自动完成,不需要用户参与。...对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。..."Access-Control-Max-Age"表明在3628800秒内,不需要再发送预检验请求,可以缓存该结果(上面的资料上我们知道CROS协议中,一个AJAX请求被分成了第一步的OPTION预检测请求和正式请求...但是针对post+json请求却失败,提示跨域失败。...查看浏览器控制台,发现option请求返回支持跨域信息,后续的post请求进入controller。 springMVC 4.X跨域 升级spring版本的后,上述跨域并不支持所有浏览器。

    91820

    Web安全(二)---跨域资源共享

    它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 整个CORS通信过程,都是浏览器自动完成,不需要用户参与。...对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。...#2 两种请求 浏览器将CORS请求分成两类:简单请求(simple request)非简单请求(not-so-simple request)。...,多人协作时,多个前端对接一个后端,这样很方便 #3.2 复杂请求 最常见的情况为,当我们使用PUT或者DELETE请求时,浏览器会先发送option(预检)请求 与简单请求不同的是,option请求多了...Access-Control-Request-Headers:该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段 Access-Control-Request-Method,Access-Control-Request-Headers

    74420

    Ajax与Comet

    XHR的用法 xhr.open("请求的类型get|post等", "请求的URL", "是否异步发送请求"); 说明: (1)URL相对于执行代码的当前页面(当然也可以使用绝对路径) (2)open...()方法并不会真正发送请求只是启动一个请求以备发送 xhr.send("请求主体发送的数据"); 说明: (1)如果不需要通过请求主体发送数据(比如get请求),则必须传入null,因为这个参数对有些浏览器来说是必需的...POST请求 POST请求将数据作为请求的主体 /* 序列化表单 */ function serialize(form){ var parts = new Array();...在发送请求时,给其附加一个额外的Origin头部,其中包含请求页面的源信息(协议、域名端口),以便服务器根据这个头部信息来决定是否给予响应。...浏览器向服务器发送一个请求服务器保持连接打开,然后周期性地向浏览器发送数据。

    66332

    跨域问题的一次深入研究

    其它的还有诸如在用户进入恶意网站后利用js脚本自动提交表单向bank.example发出带有a的session的post请求等等。 同源政策将会确保网站a拒绝来自网站b的请求。...在上面这个配置的基础上出现了几个问题: 在发送请求前,会发送preflight的OPTION请求来判断服务器是否支持该域的跨域请求以及支持的跨域方法,但是该配置并不支持跨域的OPTION请求,从而导致OPTION...方法无法通过,进而无法发送真正的GET或是POST请求 针对1中的问题开放OPTION请求之后,如果不进行认证就去访问需要认证的业务,虽然获得了401的状态码,但是会出现跨域请求失败的问题。...我们去查看浏览器发出的跨域请求时,经常会看到一个OPTION报文,它的url真正的GET或是POST请求的URL相同。这个OPTION请求就是传说中的preflight请求。...CORS报文 并不是所有的请求都需要发送preflight请求,服务器面对简单请求会直接返回Access-Control-Allow-Origin响应头来说明它的跨域访问是否通过,如果通过,则会在响应体中直接携带数据

    1.6K51

    Spring Boot + Spring Cloud 实现权限管理系统 后端篇

    如果一个请求地址里面的协议、域名端口号都相同,就属于同源。...1、简单请求CORS出现前,发送HTTP请求时在头信息中不能包含任何自定义字段,且 HTTP 头信息不超过以下几个字段: Accept Accept-Language Content-Language...2、非简单请求 对于非简单请求的跨源请求,浏览器会在真实请求发出前,增加一次OPTION请求,称为预检请求(preflight request)。...有效期内,不会重复发送预检请求 当预检请求通过后,浏览器才会发送真实请求到服务器。这样就实现了跨域资源的请求访问。...2.2 跨域解决方案 解决思路很简单,既然是因为预检请求失败导致的问题,那就让预检请求自动放行就可以了。 OAuth2Filter.java ?

    76510

    CORS解决跨域问题

    1.3 源 Web内容的源由它的URL的 协议,主机(域名)端口定义。 只有当协议,主机端口都匹配时,两个对象被认为具有相同的起源。可以使用 CORS 解除这个限制。...CORS 使用额外的请求头来说明访问是被允许的 跨域资源请求分为: (1)服务器通过请求头来声明“允许的源站,允许的资源” (2)预检请求 (3)携带身份凭据(cookie等)的情形 跨域资源共享标准新增了一组...(1) 请求端: 先发一个 OPTION 的预检请求,内容有: Origin 说明了来源 Access-Control-Request-Method 说明 下次将正式采用的方法。...Access-Control-Allow-Origin: http://foo.example 是否需要发送 预检请求,是浏览器根据规则自动做出判断。预检的过程和头部字段也是浏览器自动处理。...,那么浏览器将丢失 这次 服务端的响应内容,不传递给请求发送者。

    1.9K10

    Node.js学习笔记——Express、路由、中间件、接口跨域解决方案详解(附实例)

    监听 req 的 end 事件(请求发送完毕后自动触发) req.on('end', () => { req.body = qs.parse(str) // 把字符串格式的请求体数据,解析成对象格式...,域名、端口、协议任一不同,都是跨域 接口的跨域问题 刚才编写的 GET POST接口,存在一个很严重的问题:不支持跨域请求,解决接口跨域问题的方案主要有两种 CORS(主流解决方案,推荐) JSONP...) 默认情况下,CORS 仅支持客户端发起 GET、POST、HEAD 请求。...', '*') // 支持所有请求 CROS请求分类 客户端在请求 CORS 接口时,根据请求方式请求头的不同,可以将 CORS请求分为两大类: 简单请求 同时满足以下两大条件的请求,就属于简单请求.../json 格式的数据 在浏览器与服务器正式通信之前,浏览器会先发送 OPTION 请求进行预检,以获知服务器是否允许该实际请求,这一次的 OPTION 请求称为预检请求

    3.6K21

    怎样与 CORS cookie 打交道

    只要发送请求时的 Origin 响应头中 Access-Control-Allow-Origin 的值相同,或是 Access-Control-Allow-Origin: *(代表允许任何域存取资源)...no-cors不是灵丹妙药,就算用了这个模式,CORS 也不会因此就打开大门,也就是你的请求并不会成功发出。...有些跨来源请求不会发生 preflight,而有些请求则会,MDN上写的清清楚楚: 必须是 GET,HEAD,POST 中的一种方法 除了 user-agent 自动设置的 header 特定的...Preflight 所谓的 preflight 就是请求会先用 HTTP 的 OPTION 方法去另外一个域敲门,确认没问题后才会送出真正的请求。一旦触发了这个条件,事情就会变得麻烦得多。...如果成功的话,你会看到 network 里有两个请求,一个是 OPTIONS,另一个则是真正的请求。 ? OPTION ?

    1.3K30

    程序员应对浏览器同源策略的姿势

    , 这里设定在Ajax跨域请求发送凭据 invocation.onreadystatechange = handler; invocation.send(); } } ?...CORS规范 浏览器发起CORSPOST请求,浏览器会自动携带Origin标头(指示请求来自于哪个站点) Web服务器实现跨域访问授权逻辑, 授权结果在Response中以Access-Control...预检Preflight 对于非简单Ajax请求(通常是GET以外的HTTP方法,或者某些MIME类型的POST用法),CORS规范要求发起"预检"请求。...“不过,预检请求不需要你手动发起,浏览器会自动使用OPTIONS请求方法从服务器请求支持的方法,然后在服务器“批准”时,使用实际的HTTP请求方法发送实际请求。...对于非简单的脚本跨域请求,浏览器会自动发起 Option请求预检, 大部分时候无需关注 提供curl 工具帮助高效、优雅调试CORS

    1.2K30

    请简述跨域的几种方式

    (解决同源限制策略) CORS 需要浏览器后端同时支持。...IE 8 9 需要通过 XDomainRequest 来实现。 浏览器会自动进行 CORS 通信,实现 CORS 通信的关键是后端。只要后端实现了 CORS,就实现了跨域。...虽然设置 CORS 前端没什么关系,但是通过这种方式解决跨域问题的话,会在发送请求时出现两种情况,分别为 简单请求和复杂请求。 简单请求 - 直接携带数据发出。...以 Ajax 为例,当满足以下条件时,会触发简单请求 使用下列方法之一: GET HEAD POST Content-Type 的值仅限于下列三者之一: text/plain multipart/form-data...对于复杂请求来说,首先会发起一个预检请求,该请求option 方法的,通过该请求来知道服务端是否允许跨域请求option请求仅关心是否跨域/是否请求头被允许)。

    52320

    3000 字说说跨域!面试官听完之后露出了满意的笑容

    请问,这个时候你的好友列表是不是就被黑客给偷走了? 问题的根源 之所以会出现这个问题,其根源就在于无法区分发送者。...微信里面的JS黑客的JS发送请求几乎没有区别(referer区别) 但是如果后台的开发者没有检查 referer,那么就完全没有区别。...原因同上,一个端口一个公司的情况也不是没有的。 记住:安全链条的强度取决于最弱的一环,所有安全相关的问题都要谨慎对待。 为什么两个网站的IP一样,也算跨域? 原因同上,因为IP也是可以共用的。...它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。...复杂请求首先会发起一个预检请求,该请求option 方法的,通过该请求来知道服务端是否允许跨域请求

    88030

    facebookswift:构建thrift http server(3)--CORS跨域

    通过拦截到的这个已经解码成DefaultHttpRequest对象的HTTP请求,至少可以判断替换的HttpServerCodec编解码器已经生效了,但这第一个HTTP请求居然不是浏览器端发出的POST...这就引出了XHR请求的另一个问题CORS ? CORS跨域问题 对于HTTP协议,我们最熟悉的最常用HTTP 请求POST,GET这些,OPTIONS是啥,没见过,唉学艺不精啊。...预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送请求是否是安全的。...facebook/swift框架是基于netty3的,更重要的是netty3netty4并不兼容(package都不一样了),所以不能升级facebook/swift框架依赖的netty版本,也不可以简单的将...然而真正的POST请求还是没有响应 ? 看来问题还是没有彻底解决,下一篇文章继续。

    97220

    为什么会有OPTIONS请求

    在做项目时,很多时候发送一个post请求,是先发送一个option请求,然后再发送post请求,一直这么用之前也没有仔细思考,今天有时间,好好了解一下为什么会多一次请求。...疑问2:为什么会用到options请求 这得从浏览器同源策略跨域说起,具体可阅读也谈谈同源策略跨域问题浏览器同源政策及其规避方法,这里不在赘述。...OPTIONS请求旨在发送一种“探测”请求以确定针对某个目标地址的请求必须具有怎样的约束(比如应该采用怎样的HTTP方法以及自定义的请求报头),然后根据其约束发送真正的请求。...预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送请求是否是安全的。...CORS 详解) 总结 规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用

    53.9K4227

    JSONP、CORS解决跨域问题

    是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,对href属性都不拦截。...,否则为复杂请求 2、简单请求和复杂请求的区别 简单请求:一次请求 非简单请求:两次请求,在发送数据之前会先发第一次请求做‘预检’,只有‘预检’通过后才再发送一次请求用于数据传输。...3、关于预检 在发送真正的请求之前,会默认发送一个options请求,做预检,预检成功后才发送真正的请求 - 请求方式:OPTIONS - “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息...发了两次请求会有性能上的损耗 五、JSONPCORS的区别 JSONP:服务端不用修改,需要改前端。...如果是复杂请求在你真正的发请求之前,会先偷偷的发一个OPTION请求,先预检一下,我 允许你来你才来 如果想预检通过就得写个option请求 1 <!

    1.5K20
    领券