HTTP访问控制(CORS)
2016-02-17 09:19
585 查看
跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。
正如大家所知,出于安全考虑,浏览器会限制脚本中发起的跨站请求。跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是crsf跨站攻击原理,请求是发送到了后端服务器无论是否跨域!注意:有些浏览器不允许从HTTPS的域跨域访问
HTTP,比如Chrome和Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。
隶属于 W3C 的 Web 应用工作组( Web Applications Working Group )推荐了一种新的机制,即跨源资源共享(Cross-Origin Resource Sharing (CORS))。这种机制让Web应用服务器能支持跨站访问控制,从而使得安全地进行跨站数据传输成为可能。需要特别注意的是,这个规范是针对API容器的。比如说,要使得 XMLHttpRequest 在现代浏览器中可以发起跨域请求。浏览器必须能支持跨源共享带来的新的组件,包括请求头和策略执行。同样,服务器端则需要解析这些新的请求头,并按照策略返回相应的响应头以及所请求的资源。这篇文章适用于网站管理员、服务器端程序开发人员以及前端开发人员。
1、web.xml
2、filter
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
正如大家所知,出于安全考虑,浏览器会限制脚本中发起的跨站请求。跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是crsf跨站攻击原理,请求是发送到了后端服务器无论是否跨域!注意:有些浏览器不允许从HTTPS的域跨域访问
HTTP,比如Chrome和Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。
隶属于 W3C 的 Web 应用工作组( Web Applications Working Group )推荐了一种新的机制,即跨源资源共享(Cross-Origin Resource Sharing (CORS))。这种机制让Web应用服务器能支持跨站访问控制,从而使得安全地进行跨站数据传输成为可能。需要特别注意的是,这个规范是针对API容器的。比如说,要使得 XMLHttpRequest 在现代浏览器中可以发起跨域请求。浏览器必须能支持跨源共享带来的新的组件,包括请求头和策略执行。同样,服务器端则需要解析这些新的请求头,并按照策略返回相应的响应头以及所请求的资源。这篇文章适用于网站管理员、服务器端程序开发人员以及前端开发人员。
1、web.xml
<!-- cors配置 chrome浏览器中配置在interceptor和controller均会出错,只能使用filter --> <filter> <filter-name>cors</filter-name> <filter-class>com.roden.interceptor.SimpleCORSFilter</filter-class> </filter> <filter-mapping> <filter-name>cors</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2、filter
package com.roden.interceptor; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; @Component public class SimpleCORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); //解决微信不能打开图片的bug response.setHeader("Accept-Ranges", "byte"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
相关文章推荐
- js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
- Apache中配置支持CORS(跨域资源共享)实例
- 解决前后端分离的 CORS 跨域资源共享问题
- JS CORS
- 关于JS跨域请求的若干方式
- Cross-Origin Resource Sharing 跨域资源共享研究心得
- 跨域资源共享(CORS)
- pouchDB CouchDB 例子 及cors处理
- 使用cors(cross origin resource share)跨域获取字体文件问题
- JavaScript 跨域(CORS)
- JS 跨域资源共享 -- Ajax CORS / img ping / jsonp
- Ajax,jQuery事例
- 跨域问题及解决(2)——CORS
- angular post json数据到服务器,跨域访问,多大括号
- IIS 静态网站跨域(CORS)
- CORS 解决跨域访问问题
- spring的CORS
- jsonp和CORS跨域实现
- sencha touch《实现ajax跨域请求》