parseHeaders.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. 'use strict';
  2. import utils from './../utils.js';
  3. // RawAxiosHeaders whose duplicates are ignored by node
  4. // c.f. https://nodejs.org/api/http.html#http_message_headers
  5. const ignoreDuplicateOf = utils.toObjectSet([
  6. 'age', 'authorization', 'content-length', 'content-type', 'etag',
  7. 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
  8. 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
  9. 'referer', 'retry-after', 'user-agent'
  10. ]);
  11. /**
  12. * Parse headers into an object
  13. *
  14. * ```
  15. * Date: Wed, 27 Aug 2014 08:58:49 GMT
  16. * Content-Type: application/json
  17. * Connection: keep-alive
  18. * Transfer-Encoding: chunked
  19. * ```
  20. *
  21. * @param {String} rawHeaders Headers needing to be parsed
  22. *
  23. * @returns {Object} Headers parsed into an object
  24. */
  25. export default rawHeaders => {
  26. const parsed = {};
  27. let key;
  28. let val;
  29. let i;
  30. rawHeaders && rawHeaders.split('\n').forEach(function parser(line) {
  31. i = line.indexOf(':');
  32. key = line.substring(0, i).trim().toLowerCase();
  33. val = line.substring(i + 1).trim();
  34. if (!key || (parsed[key] && ignoreDuplicateOf[key])) {
  35. return;
  36. }
  37. if (key === 'set-cookie') {
  38. if (parsed[key]) {
  39. parsed[key].push(val);
  40. } else {
  41. parsed[key] = [val];
  42. }
  43. } else {
  44. parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
  45. }
  46. });
  47. return parsed;
  48. };