首页 > 解决方案 > axios 无法发送带有 cookie 的请求

问题描述

我正在尝试从我的 api 中获取数据,我需要在标头中传递一个 cookie。我在邮递员上进行了测试,它可以工作,但我的代码不能工作,返回错误是 403。有什么想法我错过了吗?

谢谢

这是我的代码:

function LoadStudies() {

    const config = {
    
        headers: { 
            Cookie: '_ga=GA1.2.2139220028.1611912340;csrftoken=ADJBapIX3oLu3j8QHdD05zsJnDhzx0jDYtAjKV2GY0FkBzVNfdLY8xVMV1YF4Ibd;djdt=show;sessionid=0x40wumk8ehcb4boh6610pqud5wtqsjl;session_state=4f7e11af-abd0-4f9f-8357-611100821df3' 
        },
        withCredentials :true,
   
    }
    console.log(config)
    axios
        .get("https://Domain/api/study/", config)
        .then((response) => {
            console.log('working!')
        }).catch((error) => {
            console.log(error)
        });

}

LoadStudies();

标签: javascriptreactjsaxios

解决方案


(我假设你在浏览器中运行这个客户端,给定 tag:reactjs] 标签)。

Cookie是一个禁止的标题名称

您不能使用客户端 JavaScript 手动设置标头。您必须有一个现有的 cookie(如果您有,它将被发送withCredentials: true)。

如果您正在发出同源请求,您可以通过 设置它document.cookie,否则您将必须发出 HTTP 请求(使用withCredentials: true)并让 API 设置 cookie(不过,浏览器对 3rd-party cookie 的限制可能会导致问题)。


请注意,API 通常是无状态的,因此您尝试发送带有 Google Analytics ID、会话 ID 和 csrftoken 的 cookie 是很奇怪的。通常,您只会发送一个授权令牌,现在通常是JWT,并且通常在Authorization标头而不是 Cookie 中。


推荐阅读