时间:2021-07-01 10:21:17 帮助过:3人阅读
在做一个项目的时候,采用了前后端分离的结构设计,后台设计的rest风格的http接口既需要满足后台服务调用,也需要满足前端直接采用ajax调用,于是碰到了跨域问题, 后台采用的是spring mvc结构, HTTP方法支持get、post、put、delete、option等方法,由于在post调用的时候,前端http会先采用option到服务器端,204了之后再提交请求数据,除了在nginx层面做调整之外,spring web.xml也需要设置下, 这种方案不需要在服务端增加filter之类的东西,得到的可行的版本如下:
spring web.xml
<servlet> <servlet-name>root</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-web.xml</param-value> </init-param><init-param><param-name>dispatchOptionsRequest</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet><servlet-mapping> <servlet-name>root</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
nginx.conf 有些地方比较罗嗦
location ~/api/* {
dav_methods PUT DELETE;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST,PUT,DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,
User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Max-Age' 3600;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST,PUT,DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,
User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST,DELETE,PUT, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,
User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'PUT') {
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST,PUT,DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,
User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'DELETE') {
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Methods' 'GET, POST,DELETE,PUT, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,
User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
root /opt/www/web/;
index index.jsp;
proxy_pass <a rel="nofollow" href="http://localhost.html" target="_blank">
<a rel="nofollow" href="http://localhost" target="_blank">http://localhost</a></a>:8089;
include /opt/conf/nginx/proxy.conf;
}以上就是nginx跨域设置 nginx apache nginx php nginx rewrite的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!