Nano Hash - криптовалюты, майнинг, программирование

Fetch: отправка данных json, изменение application/json на text/plain

Я использую хром 53.0.2785.116 м (64-разрядная версия).

Я получил следующие заголовки на devtools. Проблема отмечена комментарием "//". Тип контента действительно не позволяет нам установить его в application/json, я пробовал 100 разных способов.

import fetch from 'isomorphic-fetch';
const option = {
    method: 'POST',
    mode: 'no-cors',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({'aa':'bb'})
}
fetch('/books', opts)
.then(check401)
.then(check404)
.then(jsonParse)
.then(errorMessageParse);

Заголовки запроса

accept:application/json
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:97
content-type:text/plain;charset=UTF-8 //What happen?
Host:127.0.0.1:8989
Origin:http://127.0.0.1:8989
Referer:http://127.0.0.1:8989/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36

  • Обратите внимание, объект option создается, хотя opts передается fetch. 25.09.2016

Ответы:


1

Проблема в том, что когда вы работаете в 'режиме' 'no-cors', Заголовки становятся неизменяемыми и вы не сможете изменить некоторые его записи. Одна из головок, которую вы не можете изменить, — это Content-Type. Когда вы установите «режим» на «без коры», вы сможете изменить только эти заголовки:

  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type и чье значение после анализа имеет тип MIME (без учета параметров), который равен application/x-www-form-urlencoded, multipart/form-data или text/plain.

Другими словами, в 'mode' '-no-'cors' вы можете установить только application/x-www-form-urlencoded, multipart/form-data или text/plain на Content-Type.

Таким образом, решение состоит в том, чтобы прекратить использовать выборку или изменить ее на «режим cors». Конечно, это будет работать только в том случае, если ваш сервер также принимает запросы «cors».

Вот пример того, как вы можете включить CORS на сервере Apache.

SetEnvIfNoCase Access-Control-Request-Method "(GET|POST|PUT|DELETE|OPTIONS)" IsPreflight=1
SetEnvIfNoCase Origin ".*" AccessControlAllowOrigin=$0
SetEnvIfNoCase Origin "https://(url1.com|url2.com)$" AccessControlAllowOrigin=$0

Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" env=IsPreflight
Header always set Access-Control-Allow-Headers "Content-Type, Authorization, Accept, Accept-Language" env=IsPreflight
Header always set Access-Control-Max-Age "7200" env=IsPreflight
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteCond %{ENV:IsPreflight} 1
RewriteRule ^(.*)$ $1 [R=204,L]

Приведенный выше код будет вставлять заголовки CORS в ответ, когда это необходимо. С этим кодом ваш сервер разрешит CORS только из доменов «url1.com» или «url2.com».

Вот несколько ссылок

26.09.2016
  • Как сделать то же самое для приложения стека MEAN? 31.12.2018
  • @IpsitaRout, возможно, это может вам помочь: Как включить CORS в Веб-приложение MEAN STACK? 02.01.2019

  • 2

    Параметры mode:"no-cors", похоже, являются проблемой. Удалите эту опцию, и Content-Type должно быть установлено на "application/json"

    25.09.2016

    3

    Большое спасибо! Более 6 часов, чтобы решить эту проблему.

    На моем сервере nodejs

    npm install --save cors
    

    в app.js я вставил строки:

    var cors = require('cors');
    var app = express(); 
    app.use(cors());
    

    и в моем реагирующем клиенте:

    var shape_for_db = JSON.stringify(layer.geometry);
    const trechoRede = {
        method: "POST",
        mode: "cors",
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
             body: shape_for_db
    };
    
    05.07.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..