Поле заголовка запроса. Access-Control-Allow-Headers не разрешено заголовками Access-Control-Allow-Headers. - программирование

Поле заголовка запроса. Access-Control-Allow-Headers не разрешено заголовками Access-Control-Allow-Headers.

Я пытаюсь отправить файлы на свой сервер с помощью почтового запроса, но при его отправке возникает ошибка:

Поле заголовка запроса Content-Type не разрешено Access-Control-Allow-Headers.

Поэтому я погуглил ошибку и добавил заголовки:

$http.post($rootScope.URL, {params: arguments}, {headers: {
    "Access-Control-Allow-Origin" : "*",
    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}

Тогда я получаю сообщение об ошибке:

Поле заголовка запроса Access-Control-Allow-Origin не разрешено Access-Control-Allow-Headers

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

4b9b3361

Ответ 1

сервер (которому отправляется запрос POST) должен включать заголовок Access-Control-Allow-Headers (и т.д.) в своем ответе. Внесение их в ваш запрос от клиента не имеет эффекта.

Это связано с тем, что сервер должен указать, что он принимает запросы с кросс-началом (и что он разрешает заголовок запроса Content-Type и т.д.) - клиент не может решить для себя, что данный сервер должен разрешить CORS.

Ответ 2

У меня была та же проблема. В документации jQuery я нашел:

Для междоменных запросов установка типа содержимого на что-либо, кроме application/x-www-form-urlencoded, multipart/form-data или text/plain, приведет к тому, что браузер отправит на сервер запрос предварительной проверки OPTIONS.

Таким образом, хотя сервер разрешает запрос на кросс-начало, но не позволяет Access-Control-Allow-Headers, он будет вызывать ошибки. По умолчанию тип контента angular application/json, который пытается отправить запрос OPTION. Попробуйте перезаписать заголовок angular по умолчанию или разрешить Access-Control-Allow-Headers в конце сервера. Вот пример angular:

$http.post(url, data, {
    headers : {
        'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
    }
});

Ответ 3

Если это кому-нибудь поможет (даже если это плохо, так как мы должны разрешить это только для целей разработки), вот решение Java, так как я столкнулся с той же проблемой. [Править] Не используйте подстановочный знак *, так как это плохое решение, используйте localhost если вам действительно нужно, чтобы что-то работало локально.

public class SimpleCORSFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "my-authorized-proxy-or-domain");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    chain.doFilter(req, res);
}

public void init(FilterConfig filterConfig) {}

public void destroy() {}

}

Ответ 4

Серверу (которому отправлен запрос POST) необходимо включить заголовок Content-Type в ответ.

Здесь приведен список типичных заголовков, включая один пользовательский заголовок "X_ACCESS_TOKEN":

"X-ACCESS_TOKEN", "Access-Control-Allow-Origin", "Authorization", "Origin", "x-requested-with", "Content-Type", "Content-Range", "Content-Disposition", "Content-Description"

Это то, что ваш клиент http-сервера должен настроить для веб-сервера, на который вы отправляете свои запросы.

Вы также можете попросить своего парня-сервера разоблачить заголовок "Content-Length".

Он распознает это как запрос на совместное использование ресурсов (CORS) и должен понимать последствия создания этих конфигураций сервера.

Подробнее см.:

Ответ 5

Вы можете активировать правильный заголовок в PHP с помощью этого:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");

Ответ 6

Следующее работает для меня с nodejs:

xServer.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", 'http://localhost:8080');
  res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Accept');

  next();
});

Ответ 7

Заголовки, которые вы пытаетесь установить, - это заголовки ответ. Они должны быть предоставлены в ответ сервером, на который вы обращаетесь.

У них нет места для клиента. Было бы бессмысленно иметь средства для предоставления разрешений, если бы они могли быть предоставлены сайтом, который хотел разрешения вместо сайта, которому принадлежали данные.

Ответ 8

Если кто-то испытывает эту проблему с помощью экспресс-сервера, добавьте следующее промежуточное ПО

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

Ответ 9

если вы тестируете некоторые javascript-запросы для ionic2 или angularjs 2, на вашем хром на ПК или Mac, тогда убедитесь, что вы устанавливаете плагин CORS для браузера Chrome, чтобы разрешить перекрестное происхождение.

mayba get request будет работать без этого, но post и puts and delete вам понадобится установить плагин cors для тестирования без проблем, что определенно не круто, но я не знаю, как люди делают это без плагина CORS.

а также убедитесь, что ответ json не возвращает 400 некоторым статусом json

Ответ 10

Это основная проблема. если использовать паруса api для изменения бэкэнда cors.js и добавить свою заявку здесь

module.exports.cors = {
  allRoutes: true,
  origin: '*',
  credentials: true,
  methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
  headers: 'Origin, X-Requested-With, Content-Type, Accept, Engaged-Auth-Token'
};

Ответ 11

В моем случае я получаю несколько параметров как @HeaderParam в методе веб-службы.

Эти параметры ДОЛЖНЫ быть объявлены в вашем фильтре CORS таким образом:

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {

        MultivaluedMap<String, Object> headers = responseContext.getHeaders();

        headers.add("Access-Control-Allow-Origin", "*");
        ...
        headers.add("Access-Control-Allow-Headers", 
        /*
         * name of the @HeaderParam("name") must be declared here (raw String):
         */
        "name", ...);
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");   
    }
}

Ответ 12

Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers Ошибка означает, что поле Access-Control-Allow-Origin заголовка HTTP не обработано или не разрешено ответом. Удалите поле Access-Control-Allow-Origin из заголовка запроса.

Ответ 13

В Asp Net Core, чтобы быстро заставить его работать на разработку; в Startup.cs, Configure method добавить

app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());