fetch()请求使用凭据发送两次,没有预检

时间:2018-01-24 16:40:53

标签: javascript fetch-api

我正在使用fetch从我的其他服务器获取数据,并且我在客户端使用此查询和Javascript:

            return fetch(
            "http://localhost:443/myressource",  {
            method: 'GET',
            mode: 'no-cors',
            credentials : 'include',
            headers: {
                "Authorization":"Basic " + btoa("test:test"),
                "Accept-Encoding": "gzip, deflate"
            }})
           .then(response => response.text())
           .catch(err => { throw err })

问题是第一个请求已经包含凭据,通常当您发送请求时,第一个请求没有凭据,您必须在服务器端设置域,然后浏览器应该发送凭据。

有没有办法让抓取工作正常进行?意思是在需要时发送凭证?

1 个答案:

答案 0 :(得分:0)

不是100%了解您如何确定何时需要,但您可以执行以下操作:

let config = {
  method: 'GET',
  mode: 'no-cors',
  credentials: 'include',
};

if (neededCondition) {
  config.headers = {
    "Authorization": "Basic " + btoa("test:test"),
    "Accept-Encoding": "gzip, deflate"
  };
} 

return fetch( "http://localhost:443/myressource", config)
  .then(response => response.text())

也许这可以通过使用sessionStorage并检查是否存在凭证来确定