Estou tentando escrever uma chamada GET http para um site para obter pontuações de jogos. Descobri o token x-hsci-auth-token e ele usa o Token de Autorização Akamai Edge. Recebo boas respostas para todas as solicitações, exceto uma.
Para esta solicitação, recebo 204 e "Sem Conteúdo". Mas a mesma solicitação retorna uma resposta válida no DevTools do Chrome. Não sei o que estou perdendo aqui.
{
status: 204,
statusText: 'No Content',
headers: Headers {
'x-hsci-cache-time': '2025-04-05T22:59:49.093Z',
expires: 'Sat, 05 Apr 2025 22:59:49 GMT',
'cache-control': 'max-age=0, no-cache, no-store',
pragma: 'no-cache',
date: 'Sat, 05 Apr 2025 22:59:49 GMT',
connection: 'keep-alive',
'access-control-allow-headers': 'Content-Type,Authorization,x-hsci-auth-token',
'access-control-expose-headers': 'x-hsci-pwa-cache,x-hsci-cache-time,st-access-token,st-refresh-token',
'access-control-allow-credentials': 'true',
'access-control-allow-origin': 'https://www.<website>.com'
},
body: null,
bodyUsed: false,
ok: true,
redirected: false,
type: 'basic',
url: '<endpoint url>'
}
Vi que o navegador fez uma solicitação de pré-voo . Até tentei o mesmo payload com a solicitação OPTIONS e obtive 200 de volta.
Edit: Meu objetivo principal é OBTER o conteúdo. Eu estava tentando OPTIONS para ver se havia algum problema com a autenticação ou com meus cabeçalhos. Como isso funciona, acho que estou esquecendo de algo mais.
{
status: 200,
statusText: 'OK',
headers: Headers {
'content-type': 'text/html',
'content-length': '2',
expires: 'Sat, 05 Apr 2025 23:03:24 GMT',
'cache-control': 'max-age=0, no-cache, no-store',
pragma: 'no-cache',
date: 'Sat, 05 Apr 2025 23:03:24 GMT',
connection: 'keep-alive',
'access-control-allow-headers': 'Content-Type,Authorization,x-hsci-auth-token',
'access-control-expose-headers': 'x-hsci-pwa-cache,x-hsci-cache-time,st-access-token,st-refresh-token',
'access-control-allow-credentials': 'true',
'access-control-allow-origin': 'https://www.<website>.com'
},
body: ReadableStream { locked: false, state: 'readable', supportsBYOB: true },
bodyUsed: false,
ok: true,
redirected: false,
type: 'basic',
url: '<endpoint url>'
}
Estou usando os mesmos cabeçalhos de solicitação nas minhas fetch()
requisições. Então, não sei por que esse endpoint específico não retorna nada.
const response = await fetch(BASE_API_URL + path, {
method: 'GET',
headers: {
"x-hsci-auth-token": <edgeAuth token>,
"Origin": "https://www.<website>.com",
"Referer": "https://www.<website>.com/",
"accept": "*/*",
"accept-encoding": "gzip, deflate, br, zstd",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"sec-fetch-dest": "empty",
},
})
Parece que o servidor está apenas processando a
OPTIONS
solicitação de pré-voo e notificando o cliente de que nenhum conteúdo está sendo retornado. Geralmente, essas solicitações de pré-voo acontecem para solicitaçõesPOST
ouQUERY
.Por exemplo, aqui está um servidor Node.js HTTP/2 manipulando
OPTIONS
a solicitação de pré-voo https://gist.github.com/guest271314/c56d769bca04d92dc941c04d9ac40ba5#file-node-http2-server-js-L45-L49Não é possível definir o
Origin
cabeçalho do navegadorheaders
usando somente APIs da Web.Você poderia verificar todos os cabeçalhos e sinalizadores que seu navegador inclui ao enviar a solicitação? Encontrei o mesmo problema em outro projeto e o resolvi replicando todos os cabeçalhos do agente do usuário e parâmetros relacionados.