2016-09-10 1 views
2

Angular 2 rc.6 написано в typescript 2Угловое 2: пользовательское имя заголовка включено в нижнем регистр

У меня есть обертка вокруг Http службы, которая пытается установить пользовательские заголовки. В приведенном ниже коде, options является RequestOptions объект, который я предоставить Http.get():

//if the content type is not set, use application/json 
if(!options.headers.has("Content-Type")){ 
    options.headers.append("Content-Type", "application/json") 
} 

//set the X-GFX-REQUESTER header 
if(!options.headers.has("X-CUSTOM-HEADER")){ 
    options.headers.append("X-CUSTOM-HEADER", "value"); 
} 

Когда мое приложение делает запрос, (Firefox 48) сетевой журнал браузера показывает:

Content-Type: «приложение/JSON»

х-заказ заголовок: "значение"

Любая идея, почему т имя заголовка будет помещено в нижний регистр для второго заголовка?

PS: Спасибо за ответы. Действительно, хотя; разве неувязка не беспокоит кого-либо еще? Если Angular хочет заголовки нижнего регистра, я устанавливаю, почему не строчные все заголовки ???

ответ

1

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

+0

Интересно. Некоторые API-интерфейсы просят вас искать информацию в определенном заголовке. На стороне сервера, как это можно реализовать без учета регистра? Например, служба платежей Dwolla отправляет информацию в заголовок 'X-Dwolla-Signature'. Существует около '2^16' возможных комбинаций верхних и нижних строчек для этого. – BeetleJuice

+0

просто делайте как строчные буквы перед compforon. Вот почему он был изменен, поэтому вы можете легко сравнивать только lowecase –

+1

Gunter, на серверной стороне заголовки доступны как свойства объекта (с учетом регистра).Поэтому, учитывая экземпляр '$ oHeaders', я не могу получить доступ к свойству напрямую, если не знаю его обложки. '$ oHeaders-> headername' будет неопределенным, тогда как' $ oHeaders-> HeaderName' или '$ oHeaders-> HEADERNAME' может быть тем, что мне нужно. В любом случае я выпускаю. Я просто подумал, что «Угловой» не был бы таким самоуверенным, не давая пользователю способ переопределить нижнюю часть. Не говоря уже о том, что несогласованность (не все заголовки ниже) выглядит плохой дизайн. – BeetleJuice

1

Я не думаю, что вам нужно беспокоиться о том, потому что:

поле

Rfc2616 standard

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

+0

Спасибо за ссылку. Наверное, непоследовательность меня отпустила. Заголовок 'Content-Type' не все находится в нижней части. Если обсадная колонна не имеет значения, почему Угловая проходит через все проблемы, связанные с тем, чтобы опустить все? – BeetleJuice

0

Как указано в @GuntherZochbaer и @igorzg, спецификация требует, чтобы заголовки HTTP-заголовков были нечувствительны к регистру. Поэтому, если мое приложение опирается на конкретный корпус, я должен изменить свое приложение вместо того, чтобы пытаться обойти ограничения Angular.

Основная проблема заключалась в том, что мой сервер ожидал, что заголовки будут иметь тот же самый корпус, который он установил ранее. См. this github discussion.

Мое решение (на стороне сервера) состоит в том, чтобы написать пользовательские геттеры, которые возвратят запрошенный заголовок независимо от корпуса. Вместо прямого доступа к заголовкам я называю этот getter.

PHP

/** 
* Provided a request header name, returns the value (case-insensitive fetch). 
* Returns NULL if the header is not found 
*/ 
function fetchHeader($headerName){ 

    //http request headers: an associative array 
    $headers = apache_request_headers(); 
    if($headers===false) return null; 

    //lowercase all array keys 
    $headers = array_change_key_case($headers,CASE_LOWER); 

    $headerName = strtolower($headerName); 

    return isset($headers[$headerName])? $headers[$headerName] : null; 
} 
Смежные вопросы