заголовок для запроса на публикацию base64

#node.js #post #cors #base64

Вопрос:

В моем проекте Angular я делаю снимок экрана, который получаю в формате base64, чтобы отправить его с POST запросом. Все работает, но когда я перевожу его в рабочий режим, у меня возникает ошибка CORS.

Я думаю, что это связано, потому что base64-это длинная строка, которую я попробовал в заголовке: Content-type: application/octet-stream , Content-type: application/json .

Ошибка CORS:

ошибка

Конфигурация CORS:

 app.use(cors());

app.use((req, res, next) => {

res.header('Access-Control-Allow-Origin', '*'),

  res.header(

    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, Authorization',);

    if (req.method === 'OPTIONS') {
         res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
         return res.status(200).json({});
     }
next();
});
 

Угловой запрос :

 headers = { 'Content-Type': 'application/json' };


  generateSignature(signature) {
    const data = {signature:signature}
    return this.http
    .post(this.url   'generateSignature',JSON.stringify(data) , { headers: this.headers} )
    .toPromise()
    .then(res => res as any);
  }
 

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

1. в производственном режиме у меня ошибка CORS . О какой ошибке идет речь? Это важная информация для людей здесь, чтобы они могли вам помочь…

2. Обратите внимание, что вам никогда не нужно указывать Origin в заголовке Access-Control-Allow-Headers ответа. Кроме того, Access-Control-Allow-Headers это заголовок ответа для предполетного запроса, а не для фактического запроса.

3. Наконец, пожалуйста, опубликуйте фактический исходный код вашей конфигурации CORS, а не изображение. Здесь людям будет легче играть с ними.

Ответ №1:

Access-Control-Allow-Headers Заголовок должен быть указан в ответе на предполетный запрос, но в вашем коде вы задаете его в ответе на фактический запрос.

Кроме того, вы оба используете промежуточное программное обеспечение CORS Express и устанавливаете заголовки CORS «вручную». В этом нет необходимости. Просто правильно настройте промежуточное программное обеспечение:

 const options = {
    origin: 'http://localhost:4200',
    optionsSuccessStatus: 200,
    methods: ['PUT', 'POST', 'PATCH', 'DELETE', 'GET'],
    allowHeaders: ['X-Requested-With', 'Content-Type', 'Accept', 'Authorization']
};

app.use(cors(options));
 

Наконец, никогда не нужно указывать Origin разрешенные заголовки, потому что этот заголовок запроса автоматически устанавливается самим браузером и, следовательно, получает пропуск.