Разница в типе содержимого в Chrome и Firefox после вызова

#javascript #angularjs #ajax #rest #http-headers

#javascript #angularjs #ajax #остальное #http-заголовки

Вопрос:

Ниже приведен вызов, который я делаю для Rest API.Это всего лишь часть более крупного скрипта.

 SomeServiceService.addNewCall = function(data)
    {

      deferred = $q.defer();
      addNewPaymentMethodsServiceCall  = $http({
        url: rootUrl   'user/v1/something',
        method: 'POST',
        data: data,
        headers: {
          'Content-Type': 'application/json',
          'Accept-Language': 'en-us'
        }
      }).success(function(response){
        deferred.resolve(response);
      }).error(function(response,status){
        response.status= status;
        deferred.reject(response);
      });
      return deferred.promise;
    };
 

Проблема, с которой я сталкиваюсь, заключается в разнице Content-Type в Chrome и Firefox.

В Chrome

 Accept-Language:en-US
Cache-Control:no-cache 
Content-Type:application/json
If-Modified-Since:Mon, 26 Jul 1997 05:00:00 GMT
Origin:https://mydomain 
Pragma:no-cache
Referer:mydomain/users/app/
User-Agent:Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143
Safari/537.36
 

В Firefox

 Accept  text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding  gzip, deflate
Accept-Language  en-US 
Cache-Control    no-cache 
Connection       keep-alive 
Content-Length   157 
Content-Type     application/json; charset=UTF-8 
Host             mydomain 
If-Modified-Since    Mon, 26 Jul 1997 05:00:00 GMT 
Pragma           no-cache 
Referer          https://mydomain/users/app/ 
User-Agent       Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:43.0)     Gecko/20100101 Firefox/43.0
 

Несмотря на то, что в вызове ajax я явно объявляю Content-type , application/json что firefox добавляет charset-UTF-8 , что прерывает мой вызов API, поскольку API поддерживает только application/json .

Как я могу заставить firefox не изменять тип содержимого? Это происходит только для POST, PUT.

Любые предложения или помощь приветствуются.

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

1. Вы действительно должны исправить API. В 2016 году он должен быть в состоянии справиться с наличием параметра для типа содержимого.

2. Требования на стороне API являются надежными, и в документе говорится, что api поддерживает только application / json. Поэтому я не думаю, что изменение api является решением. Почему firefox добавляет что-то к типу содержимого, когда я явно определяю это в коде, вот что я хочу знать и исправить.

Ответ №1:

Ответ Квентина выше верен:

Вы действительно должны исправить API. В 2016 году он должен быть в состоянии справиться с наличием параметра для типа содержимого.

Сегодня у нас была та же проблема, и мы решили ее, изменив API: вместо проверки, равен ли тип содержимого ‘application / json’, мы проверяем, содержит ли тип содержимого эту строку.

Конкретный код зависит от языка, но для Python (с использованием Falcon REST framework) это был вопрос замены

if req.content_type == 'application/json':

с

if 'application/json' in req.content_type: