怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域。
方案1:
使用XMLHttpRequest... 异步请求不能跨域访问,除非要访问的网页响应头信息设置为允许跨域访问。
将网页设置为允许跨域访问的方法如下:
Response.setHeader("Access-Control-Allow-Origin", "*");
或指定域名下可以访问:
Response.setHeader("Access-Control-Allow-Origin", "http://www.1688hot.com:80");
网上很多资料说使用Response.addHeader添加头信息,在spring项目中需注意:
当提交方式非get时(请求头存在Origin项信息[Origin与Referer功用类似,Origin只用于Post请求,而Referer则用于所有类型的请求]) spring-web:4.3.2.RELEASE 中CorsFilter过滤器会默认设置(Access-Control-Allow-Origin=*)
如果在程序中再执行Response.setHeader("Access-Control-Allow-Origin", "*"),就会出现跨域头信息重复问题(实际返回了两个一样的头信息),异常如下
方案2:
使用 jsonp 请求实现
其他跨域头信息说明:
Access-Control-Allow-Credentials:true/false 是否允许浏览器附带身份凭证的请求(如cookies),
客户端也需要相应配置确定携带身份凭证信息 xhrFields: {withCredentials: true}
Access-Control-Allow-Methods:GET,POST 允许客户端发起请求的方法
Access-Control-Allow-Headers: 允许客户端添加的头信息项
参考文献:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS