Tomcat 用于Post请求的弹性Beanstalk CORS配置
从本地主机提交post请求时,我收到以下错误-Tomcat 用于Post请求的弹性Beanstalk CORS配置,tomcat,configuration,cors,amazon-elastic-beanstalk,preflight,Tomcat,Configuration,Cors,Amazon Elastic Beanstalk,Preflight,从本地主机提交post请求时,我收到以下错误- XMLHttpRequest cannot load http://sample-env.elasticbeanstalk.com/resource Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
XMLHttpRequest cannot load http://sample-env.elasticbeanstalk.com/resource
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:8080' is therefore not allowed access
但是,在我的S3实例的CORS配置编辑器中,我有以下内容-
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
是否有人认为我的配置有问题,或者是否必须添加其他内容?我能够将CORS过滤器添加到我的tomcat的web.xml中,并且一切正常,因此我认为我配置的elastic beanstalk不正确
编辑
添加了以下.config文件(以前是.yaml)
添加_cors.config.config
files:
"/etc/httpd/conf.d/cors.conf" :
mode: "000644"
owner: root
group: root
content: |
<Location "/">
Header set Access-Control-Allow-Origin: *
Header set Access-Control-Allow-Methods: "POST, GET, PUT, DELETE, OPTIONS"
Header add Access-Control-Allow-Headers: "Authorization, Content-Type, Accept"
Header set Access-Control-Allow-Credentials: true
SetOutputFilter DEFLATE
</Location>
我重新部署了war,但仍然有相同的错误-“不存在“访问控制允许源”标题”
解决方案
不需要。需要ebextensions文件。我只需要将CORS过滤器添加到web.xml中,就像我在tomcat的conf/web.xml中所做的那样
<!-- ================== CORS FILTERS ===================== -->
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
克斯菲尔特
org.apache.catalina.filters.CorsFilter
科尔斯
*
cors.methods
获取、发布、头部、选项
cors.allowed.headers
内容类型、X-Requested-With、accept、Origin、访问控制请求方法、访问控制请求标头
cors.exposed.headers
访问控制允许来源,访问控制允许凭据
cors.support.credentials
真的
cors.preflight.maxage
10
克斯菲尔特
/*
我对AWS EB不太了解,但是假设tomcat前面有一个apache反向代理,那么您可以使用ebextensions并在那里添加CORS头信息。见此:
及
谢谢。我尝试添加一个cors配置文件,但仍然遇到同样的问题。请尝试根据文档将文件扩展名更改为.config(remove.yaml):然后重新部署。另外,仔细检查yaml文件中的缩进。根据你上面粘贴的内容,它看起来缺少了很多缩进。谢谢。我更改了扩展名并添加了适当的缩进,但它仍然返回相同的错误。只需将CORS过滤器添加到web.xml中,就解决了如何访问和编辑web.xml文件的问题?谢谢
files:
"/etc/httpd/conf.d/cors.conf" :
mode: "000644"
owner: root
group: root
content: |
<Location "/">
Header set Access-Control-Allow-Origin: *
Header set Access-Control-Allow-Methods: "POST, GET, PUT, DELETE, OPTIONS"
Header add Access-Control-Allow-Headers: "Authorization, Content-Type, Accept"
Header set Access-Control-Allow-Credentials: true
SetOutputFilter DEFLATE
</Location>
.
├── app.war
├── .ebextensions
│ ├── add_cors.config.yaml
├── META-INF
│ ├── …
└── WEB-INF
├── classes
│ └── …
├── servlet.xml
├── lib
│ ├── …
└── web.xml
<!-- ================== CORS FILTERS ===================== -->
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>