Я предполагаю, что мне нужно установить какой-то контекст, прежде чем я объясню возникшую у меня проблему.Имена 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-адреса автоматически?
Почему диск с правом голоса? – coneybeare
Coneybeare, спасибо за ответ. Если вы также знаете о ответе на вопрос 2), пожалуйста, пролите больше света на это. – indiantroy