Исходный заголовок CORS

#javascript #node.js

#javascript #node.js

Вопрос:

Я пытаюсь проверить, установлен ли исходный заголовок в запросе клиента. На данный момент я пытаюсь сделать первый оператор if, но он не работает. Как это можно исправить?

  const http = require('http');
 const port = 3000;

 http.createServer((req, res) => {
    headers = {
       'Access-Control-Allow-Origin': '*',
       'Access-Control-Allow-Methods': 'GET, POST, HEAD',
       'Access-Control-Max-Age': '7200'       

   };

   if (req.headers['ORIGIN'] === null) {
       res.statusCode = 400;
       res.end("Origin header not in the request")
   }

   if (req.method === 'HEAD') {
       res.writeHead(200, headers);
    res.end();
   }
   if (req.method === 'GET') {
       res.writeHead(200, headers);
       res.end("I was requested using CORS!");
   }

   if (req.method === 'POST') {
       res.writeHead(200, req.headers);
       res.end("I was requested using CORS!");
   }
   if (req.method =! 'GET' amp;amp; req.method != 'POST' amp;amp; req.method != 'HEAD'){
       res.writeHead(405, headers);
       res.end("Request used a HTTP method which is not allowed.");
   }
}).listen(port);
  

Комментарии:

1. if (req.method =! 'GET' amp;amp; req.method != 'POST' amp;amp; req.method != 'HEAD'){ собирается заблокировать запрос параметров перед запуском, что делает настройку Access-Control-Allow-Methods бессмысленной.

Ответ №1:

Заголовки, которые не существуют, будут undefined , а не null .

Однако это не очень полезная проверка. Это просто останавливает людей, посещающих URL-адрес непосредственно в браузере, или от выполнения запроса того же источника с помощью JS. Это не помешает им использовать другие инструменты для выполнения HTTP-запросов.

Ответ №2:

Заголовки HTTP не чувствительны к регистру. Из RFC 2616, раздел 4.2:

Каждое поле заголовка состоит из имени, за которым следует двоеточие («:»), и значения поля. Имена полей не чувствительны к регистру.

По этой причине HTTP-модуль NodeJS преобразует все имена заголовков в нижний регистр. При этом вы можете получить доступ к необработанным именам заголовков через req.rawHeaders.

Чтобы заставить ваш код работать, я бы проверил наличие origin заголовка в нижнем регистре, и я бы также проверил, является ли его значение undefined , а не null потому, что, если заголовок не существует в запросе, его значение будет undefined .