跨域入门-带自定义头的跨域

关于Ajax带自定义头的跨域请求,请往下看:

 模拟两种传递header自定义头的方式:


$.ajax({
	type:"get",
	url:base+"/getHeader",
	headers:{
		"x-header1":"AAA"
	},
	beforeSend:function(xhr){
		xhr.setRequestHeader("x-header2","BBB");
	}
})

接收端:

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RestController
public class CrosController

    @GetMapping("/getHeader")
    public ResultBean getHeader(@RequestHeader("x-header1") String header1,@RequestHandler("x-header2") String header2){
		System.out.println("CrosController.getHeader()");
		return new ResultBean("getHeader" + header1 + " " + header2);
	} 
}

在浏览器Header中会发现增加了如下:

Access-Control-Request-Headers: x-header1,x-header2

后端需要修改为:

package vip.fkandy;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class CrosFilter implements Filter {
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse)response;
		HttpServletRequest req = (HttpServletRequest)request;
		//支持所有域名跨域
		String origin = req.getHeader("Origin");
		if(!StringUtils.isEmpty(origin)){
			res.addHeader("Access-Control-Allow-Origin",origin);
		}
		
		res.addHeader("Access-Control-Allow-Credentials","true");
        res.addHeader("Access-Control-Allow-Methods","*");
		res.addHeader("Access-Control-Allow-Headers","Content-Type,x-header1,x-header2");
		res.addHeader("Access-Control-Max-Age","3600");
        chain.doFilter(request,response);
    }
}

优化写法:

 
package vip.fkandy;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class CrosFilter implements Filter {
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse)response;
		HttpServletRequest req = (HttpServletRequest)request;
		
		//支持所有域名跨域
		String origin = req.getHeader("Origin");
		if(!StringUtils.isEmpty(origin)){
			res.addHeader("Access-Control-Allow-Origin",origin);
		}
		
		res.addHeader("Access-Control-Allow-Credentials","true");
        res.addHeader("Access-Control-Allow-Methods","*");

		//处理自定义头的请求
		String headers = req.getHeader("Access-Control-Request-Headers");
		if(!StringUtils.isEmpty(headers)){
			res.addHeader("Access-Control-Allow-Headers",headers);
		}
		
		res.addHeader("Access-Control-Max-Age","3600");
        chain.doFilter(request,response);
    }
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值