RequestHeaders添加自定義參數

在開發過程當中有的時候,參數須要綁定到requestHeaders中,而並非在body中進行傳輸。這個時候就須要咱們本身定義參數(須要後臺的配合)java

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

問題一:在瀏覽器的console中報錯:自定義字段不被容許ios

Request header field 自定義字段 is not allowed by Access-Control-Allow-Headersajax

緣由:axios

包含自定義header字段的跨域請求,瀏覽器會先向服務器發送OPTIONS請求,探測該服務器是否容許自定義的跨域字段。跨域

若是容許,則繼續實際的POST/GET正常請求,不然,返回標題所示錯誤。瀏覽器

同時在requestHeaders請求中有你定義的字段,但結果不是咱們想要的服務器

在responseHeaders中Access-Control-Allow-Headers中表示服務器容許跨域請求的參數ide

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

解決方案:post

服務端須要對OPTIONS請求作出應答,應答header中包含Access-Control-Allow-Headers,且值包含options請求中Access-Control-Request-Headers的值。this

如下爲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

相關文章
相關標籤/搜索