J'ai un code NodeJS qui utilise le module https
comme: https.request(options, (res) => {......
où options
est un objet comme
const options = {
hostname: SERVICE_HOSTNAME,
path: BASE_PATH,
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
ApplicationId,
Authorization
}
};
Mes problèmes commencent lorsque j'ajoute l'en-tête Accept
. J'obtiens une erreur:
TypeError [ERR_INVALID_HTTP_TOKEN]: Header name must be a valid HTTP token ["Accept"]
at ClientRequest.setHeader (_http_outgoing.js:472:3)
at new ClientRequest (_http_client.js:203:14)
at Object.request (https.js:289:10)
Comment l'en-tête Accept
serait-il invalide?
Je n'ai pas mangé à cause de votre question T_T
Comme @hlfrmn l'a dit, vous avez un caractère rare dans votre mot d'acceptation !!
J'ai reproduit l'erreur:
const https = require('https');
//copied from Origin question
var copiedOptions = {
headers: {
'Content-Type': 'application/json',
"Accept": 'application/json'
}
}
var writedOptions = {
headers: {
'Content-Type': 'application/json',
"Accept": 'application/json'
}
}
https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY',writedOptions, (resp) => {
let data = '';
// A chunk of data has been recieved.
resp.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log(JSON.parse(data).explanation);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
Si vous essayez avec copiedOptions , vous obtiendrez la même erreur.
Recherche dans https://github.com/nodejs/node/tree/master et le stackTrace: _ http_outgoing.js: 472
at ClientRequest.setHeader (_http_outgoing.js:472:3)
J'ai fondé ceci:
const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;
/**
* Verifies that the given val is a valid HTTP token
* per the rules defined in RFC 7230
* See https://tools.ietf.org/html/rfc7230#section-3.2.6
*/
function checkIsHttpToken(val) {
return tokenRegExp.test(val);
}
Cette expression régulière garantit que le nom de l'en-tête n'a autorisé que les jetons ou les caractères selon https://tools.ietf.org/html/rfc7230#section-3.2.6
Peut-être qu'une validation antérieure dans le noyau de nodejs pourrait aider:
Vous avez un caractère non autorisé dans votre nom d'en-tête!