RequestHeaders添加自定义参数

摘要:
有时在开发过程中,参数需要绑定到requestHeaders,而不是在主体中传输。localStorage.getItem:''this.instance.defaults.headers。Common['tokens']=token}//使用轴添加requestHeaders参数。封装在ajax请求中~问题1:浏览器控制台中报告错误:不允许自定义字段Requestheaderfield Access Control Allow Headers不允许自定义域原因:对于包含自定义标头字段的跨域请求,浏览器将首先向服务器发送OPTIONS请求,以检测服务器是否允许自定义跨域字段。

在开发过程中有的时候,参数需要绑定到requestHeaders中,而并不是在body中进行传输。这个时候就需要我们自己定义参数(需要后台的配合)

  setToken() {
    let token = localStorage.getItem('token') ? localStorage.getItem('token') : ''
    this.instance.defaults.headers.common['tokens'] = token
  }
// 使用axios添加requestHeaders参数。封装到ajax请求中~

问题一:在浏览器的console中报错:自定义字段不被允许

Request header field 自定义字段 is not allowed by Access-Control-Allow-Headers

RequestHeaders添加自定义参数第1张

原因:

包含自定义header字段的跨域请求,浏览器会先向服务器发送OPTIONS请求,探测该服务器是否允许自定义的跨域字段。

如果允许,则继续实际的POST/GET正常请求,否则,返回标题所示错误。

RequestHeaders添加自定义参数第2张

同时在requestHeaders请求中有你定义的字段,但结果不是我们想要的

RequestHeaders添加自定义参数第3张

在responseHeaders中Access-Control-Allow-Headers中表示服务器允许跨域请求的参数

Access-Control-Allow-Headers: Content-Type, x-requested-with, X-Custom-Header, Authorization,token

解决方案:

服务端需要对OPTIONS请求做出应答,应答header中包含Access-Control-Allow-Headers,且值包含options请求中Access-Control-Request-Headers的值。

以下为java服务端filter中设置的OPTIONS请求处理代码。

@Override
 
public void doFilter(ServletRequest req, ServletResponse resp,
        FilterChain chain) throws IOException, ServletException {
 
    try {
 
        HttpServletRequest hreq = (HttpServletRequest) req;
 
 
 
        HttpServletResponse hresp = (HttpServletResponse) resp;
 
        //跨域
        hresp.setHeader("Access-Control-Allow-Origin", "*");
 
 
        //跨域 Header
 
        hresp.setHeader("Access-Control-Allow-Methods", "*");
 
        hresp.setHeader("Access-Control-Allow-Headers", "Content-Type,TOKENS");  // 在这里配置你要定义的参数
 
        
 
        // 浏览器是会先发一次options请求,如果请求通过,则继续发送正式的post请求
 
        // 配置options的请求返回
 
        if (hreq.getMethod().equals("OPTIONS")) {
 
            hresp.setStatus(HttpStatus.SC_OK);
 
            // hresp.setContentLength(0);
 
            hresp.getWriter().write("OPTIONS returns OK");
 
            return;
 
        }
 
        // Filter 只是链式处理,请求依然转发到目的地址。
 
        chain.doFilter(req, resp);
 
    } catch (Exception e) {
 
        e.printStackTrace();
 
    }
 
}

其中,这个就是所需设置的应答Header:

hresp.setHeader("Access-Control-Allow-Headers", "Content-Type,TOKENS");

* header中对值的大小写貌似不敏感。

参考博客:https://blog.csdn.net/xuedapeng/article/details/79076704

免责声明:文章转载自《RequestHeaders添加自定义参数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python和C++交互仟叶学校:武汉老师最燃演讲“人生很贵,请别浪费”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

微信扫码网页登录,redirect_uri参数错误解决方法

对于微信开放平台[管理中心/应用程序详细信息]中设置的[开发信息][授权回调域],只需填写域名,无需https://,也无需特定页面。您不需要填写完整的请求路径,如图所示:https://open.weixin.qq.com/connect/qrconnect?appid=您的APPID&direct_Uri=回调和响应的特定地址_type=code...

Android开发实战——记账本(4)

父母亲mCostBeanList.remove(位置);builder.setNegativeButton(“取消”;builder.create().show();returntrue;}returnsuper.onOptionsItemSelected(项);...

用python调用caffe时出错:AttributeError: 'module' object has no attribute 'bool_'

下面给出了一个解决方案,即重命名冲突的io文件:numpyと PyCaffe公司が io。年が 竞争す る よ で す$ pythonclassify。py--raw_scale255~/caffe/101_ObjectCategories/airaires/image_0001.jpg../result.npyTraceback:文件“classif.py...

如何控制el-image预览图片的大小

Src=“scope.row.carlouseUrl”:1。从“element-ui/packages/image/src/image-viewer”2导入图像查看器importerImageViewer。寄存器组件:3。使用组件<El table columnlabel=“旋转图表”width=“220px”>...

Django如何安装指定版本

Django的最新版本默认安装为:pipinstalldjangoDjango,然后是版本号:pipinstalldjango==1.11.7如果使用pipinstall库的安装速度较慢,您可以使用豆瓣的图片:pipinstalldjango==1.11.7-ihttp://pypi.douban.com/simple--trusted-hostpypi.d...

批处理bat脚本自动配置java的jdk环境变量

前言每次更换计算机或重新安装系统时,都需要重新配置java系统路径。但我不想每次都检查配置方法,所以我编写了一个脚本来自动配置。脚本内容@echooff@echo步骤1:输入要设置的JAVA_HOME路径:set/pinput=“请输入JAVA_HOME路径:”@echo步骤2:设置JAVA_ HOME路径setxJAVA_HOME“%input%”/M@e...