HTTP-имена веб-методов должны быть заглавными? - PullRequest
0 голосов
/ 16 марта 2012

Полагаю, мне нужно установить контекст, прежде чем я объясню свою проблему.

Для моего приложения для 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 ]

2 голосов
/ 16 марта 2012

От спецификация :

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

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

0 голосов
/ 16 марта 2012

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

...