2016-11-08 4 views
2

Я прочитал this вопрос, но он не ответил на мой quesiton.В чем разница между параметрами HTTP и заголовками HTTP?

Для меня заголовков и параметров являются словарями с той разницей, что заголовки является [String : String] в то время как параметры являются [String : AnyObject]? и поэтому, если ваши параметры также Струны, то вы могли отправить их в заголовках (при использовании «x-» префикс означать, что они не являются стандартными заголовками), что является обычной, но не очень хорошей практикой.

  • Верно ли это?
  • Есть ли другая разница между headers и parameters?
  • Какие другие типы, отличные от String, вы отправляете с использованием parameters?

Alamofire Request метод

public func request(
     method: Method, 
     _ URLString: URLStringConvertible, 
      parameters: [String: AnyObject]? = nil, 
      encoding: ParameterEncoding = .URL, 
      headers: [String: String]? = nil) 
     -> Request 
    { 
     return Manager.sharedInstance.request(
      method, 
      URLString, 
      parameters: parameters, 
      encoding: encoding, 
      headers: headers 
     ) 
    } 

В качестве примера я видел людей, проходящих ["x-ios-version" : UIDevice.currentDevice().systemVersion] или строить версии через заголовки

+1

[HTTP spec говорит] (https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.3) «Поля заголовка запроса позволяют клиенту передавать дополнительную информацию о запросе , а также о самом клиенте на сервере ». Заголовки предназначены для метаинформации о запросе, который позволяет веб-серверу анализировать запрос. С другой стороны, параметры запроса являются фактическим содержанием запроса. Я бы не стал объединяться с ними только потому, что они оба состоят из пар ключей и ценностей. – Rob

+0

@ Rob OK. Я спрашиваю, что мне делать. ТАКЖЕ Я спрашиваю, что делают другие :), независимо от того, насколько это хорошо ... Поэтому я могу понять, где код и как использовать HTTP-заголовки. Извините, если я повторяю себя: * если ваши параметры также являются строками, то вы ** можете ** отправить их в заголовки (при использовании префикса «x-», чтобы обозначить, что они не являются стандартными заголовками), который является * * несколько ** обычный но не хорошая практика * <- некоторые используют это так? – Honey

+0

Я действительно не понимаю. Вы спрашиваете, можете ли вы добавить свои собственные пользовательские заголовки с информацией, которая действительно принадлежит параметрам, даже если вы знаете, что это не хорошая практика? Конечно, но это плохая идея. Если у вас есть пример параметра, который вы планируете создать заголовок, отредактируйте вопрос, чтобы включить его. – Rob

ответ

3

Вот список различий.

  1. Они предназначены для разных целей. Заголовки несут метаинформацию, параметры передают фактические данные.

  2. HTTP-заголовки не могут переносить содержимое Юникода. См. Здесь Can I use Unicode characters in HTTP headers?

    BUT параметры могут нести содержимое Юникода.

  3. Веб-сервер автоматически будет изменять значения параметров Un-escape/Decode. Это не относится к заголовкам.

+0

Итак, если бы я хотел отправить что-то по-арабски, мне пришлось использовать параметры? – Honey

+0

Да, если вы не конвертируете арабский текст в текст Base64 - например. – Loc

+1

Или проценты бежать. Но независимо от того, что вы делаете, вам необходимо вручную отменить процесс на сервере (где параметры обычно автоматически интерпретируются веб-серверами на основе заголовка «Content-Type» запроса). – Rob

2

Из беседы с Робом в чате:

Критерии в том, что, если это информация о запрос или о клиент, то заголовок подходит.
Но если это содержимое самого запроса (например, то, что вы запрашиваете с сервера, некоторые детали, которые идентифицируют возвращаемый элемент, некоторые детали для сохранения на веб-сервере и т. Д.), То это параметр.

В качестве примера:

Параметр
Допустим, вы запрашиваете изображение для продукта. Идентификатор продукта может быть одним из параметров. Другим параметром может быть размер изображения (миниатюра и полный размер). Идентификатор продукта и запрошенный размер изображения являются примерами «некоторых деталей» (или параметров), поставляемых как часть содержимого запроса.

Заголовок
Но такие вещи, как, что запрос JSON или х-WWW-форм-urlencoded не содержание запроса, а информация о запросе (особенно, так как это необходимо для веб-службы, чтобы узнать, как для анализа тела запроса). Вот почему это заголовок.

Смежные вопросы