2012-03-16 1 views
0

Я предполагаю, что мне нужно установить какой-то контекст, прежде чем я объясню возникшую у меня проблему.Имена HTTP Web-методов должны быть заглавными буквами?

Для моего приложения iOS я пишу свой HTTPClient, используя NSOperationQueue, и выполняю каждую операцию, обертывая NSURLRequest и NSURLConnection в главном цикле запуска с помощью NSRunLoopCommonModes, чтобы он не блокировал пользовательский интерфейс.

Я заметил, что веб-службы, которые не требуют аутентификации, отлично работают и возвращают данные, но веб-службы, которым требуется аутентификация, возвратили код состояния 503 - Ошибка обслуживания недоступна.

Прежде чем я позвоню в любую из веб-служб, я завершаю процесс аутентификации, обрабатывая несколько переадресаций URL-адресов, используя веб-представление, и, наконец, после успеха, я устанавливаю файл cookie. Поэтому этот файл cookie должен быть отправлен автоматически для веб-служб, для которых требуется аутентификация, а веб-службы, требующие аутентификации, должны работать в идеальном варианте. Так было с моим предыдущим HTTPClient без NSOperationQueue. Я не передал cookie явно.

Я много отлаживал и, наконец, решил, что проблема не такая сложная, но глупая. Фактическая проблема заключалась в отправке имени метода HTTP для моего URLRequest. Я передавал имя метода в паскале, а не в верхнем регистре.

Итак, если у меня есть [myURLRequest setHTTPMethod: @ "Get"], веб-службы, требующие аутентификации, не работают, но после изменения имени метода на буквы верхнего регистра, такие как [myURLRequest setHTTPMethod: @ "GET"], он начал работать.

Так получилось, что это не проблема с аутентификацией, а с именем веб-метода.

Мне интересно о двух вещах: 1) Это правило, что имя веб-метода всегда должно быть в верхнем регистре? Или это специфично для iOS? Обратите внимание, что веб-службы, которые не требуют аутентификации, отлично работают с именем веб-метода, не имеющим также в верхнем регистре.

2) Файл cookie аутентификации, установленный для успешной аутентификации, никогда не отправляется явно вместе с любым NSURLRequest. Итак, как iOS отправляет его вместе с запросом URL-адреса автоматически?

ответ

2

От the specification:

Маркер Метод указывает на то, что метод будет выполняться на ресурсе, идентифицированного Request-URI. Метод чувствителен к регистру.

Затем он перечислит несколько имен методов, все из которых полностью в верхнем регистре.

0

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

+0

Почему диск с правом голоса? – coneybeare

+0

Coneybeare, спасибо за ответ. Если вы также знаете о ответе на вопрос 2), пожалуйста, пролите больше света на это. – indiantroy