我有一个Angular Web应用程序,需要它与运行在ApacheTomcat上的Jasper Reports Server REST API通信。我目前面临的问题是启用CORS。
我曾尝试使用Tomcat配置启用CORS,但我已经放弃了这一点,希望使用Nginx创建一个反向代理。
Tomcat正在192.168.21.18:8080上运行,我可以在192.168.21.18:8080/jasperserver/.上访问Jasper报告服务器,我在笔记本电脑上使用ng service
运行Angular Web Application。
我已尝试使用下面的配置创建反向代理
server {
listen 8081;
server_name _;
access_log /var/log/nginx/tomcat-access.log;
error_log /var/log/nginx/tomcat-error.log;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
return 204;
}
location / {
proxy_redirect off;
rewrite /(.*) /$1 break;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
}
我正在使用默认的Tomcat配置,并且只更改了manager webapp的配置。我已在$CATALINA_HOME/webapps/manager/META-INF/context中禁用了RemoteAddrValve。xml
但是,当我尝试向发送POST请求时http://192.168.21.18:8081/jasperserver/rest_v2/reportExecutions我得到这个错误。
Access to XMLHttpRequest at 'http://192.168.21.18/jasperserver/login.html'
(redirected from 'http://192.168.21.18:8081/jasperserver/rest_v2/reportExecutions')
from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't
pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
如您所见,您将从http://192.168.21.18:8081
至http://192.168.21.18
(默认端口80
)。
虽然URL生成背后的确切逻辑取决于JasperReport的代码,但servlet应用程序通常使用ServletRequest对象的serverName
和serverPort
属性来生成URL的权限部分。
您需要配置NGINX以转发主机
头,方法如下:
proxy_set_header Host $http_host;
或
proxy_set_header Host $host:8081;
关于这两个指令之间的区别,请参见此答案;
或者,您可以在Tomcat的
<Connector ...
proxyName="192.168.21.18"
proxyPort="8081" />
备注:由于您不使用
远程IpValve
,所以您添加到请求中的所有X-Forwarded-*
标头都不会被Tomcat使用。
另外,您可以在
$CATALINA_BASE/conf/web中配置
,因此它适用于所有应用程序。CorsFilter
,而不是使用NGINX。xml
我正在从主机(http://abc.com.au)向主机http://localhost:8081上运行的Spring Cloud API网关发送ajax请求。 jquery AJAX请求代码。 SimplifiedAdoptionBulkUpload.jsp spring cloud gateway cors配置。 我在chrome控制台中遇到以下错误。 SimplifiedAdoptionBu
我在后端使用spring boot服务,在前端使用angular 6。 在spring boot中,我使用启用了cors。 并且我正在为每个服务使用拦截器。 在前端呼叫服务中: 如果使用拦截器,我会得到以下异常。如果不使用隔膜,我不会得到cors错误。 加载失败http://localhost:7070/example/myservice:飞行前响应中的访问控制允许标头不允许请求标头字段访问控制允
我正在使用reactjs前端,在后端使用Spring Boot。我尝试从前端调用endpoint,如下所示: 当我发出请求时,我得到以下错误:- 访问位于“”的XMLHttpRequesthttp://localhost:8000/ckcapp/api/posttest“起源”http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在
我正在尝试将Laravel社交名流集成到我的项目中,我遇到了以下错误 在'访问XMLHttpRequesthttps://github.com/login/oauth/authorize?client_id=6b87b76a942a90caec24 问题是当我按使用 github 按钮登录时,出现上述错误 错误图片 科尔斯.php文件 am使用水果蛋糕/laravel-cors包 我哪里做错了?
我所代理的服务器不返回位置标头,这意味着我的不返回任何东西。 我想记录我的上游请求,这样我就可以在日志中看到我向上游服务器发出的请求。 我想知道是否有一种简单的方法可以在不创建lua脚本的情况下记录Nginx发出的出站请求,或者lua脚本是最好的方法,有人可以在我的搜索中提供方向吗?
我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php: