ios - HTTP Web 方法名称必须是大写字母?

标签 ios http web nsurlconnection nsurlrequest

我想在解释我遇到的问题之前我必须设置一些上下文。

对于我的 iOS 应用程序,我正在使用 NSOperationQueue 编写自己的 HTTPClient,并使用 NSRunLoopCommonModes 在主运行循环上执行每个包装 NSURLRequest 和 NSURLConnection 的操作,这样它就不会阻塞 UI。

我注意到不需要身份验证的 Web 服务工作正常并返回数据,但需要身份验证的 Web 服务返回状态代码 503 - 服务不可用错误。

在我调用任何 Web 服务之前,我通过使用 Web View 处理多个 URL 重定向来完成身份验证过程,最后在获得成功后,我设置了一个 cookie。所以这个 cookie 应该为需要身份验证的 Web 服务自动发送,并且需要身份验证的 Web 服务应该可以正常工作。我之前没有 NSOperationQueue 的 HTTPClient 就是这种情况。我没有明确传递 cookie。

我做了很多调试,最后发现问题不是那么复杂而是愚蠢。实际问题是在为我的 URLRequest 发送 HTTP 方法名称时,我以 Pascal 大小写而不是大写形式传递了方法名称。

因此,如果我有,[myURLRequest setHTTPMethod:@"Get"] 要求身份验证的 Web 服务不起作用,但在将方法名称更改为大写字母后,如 [myURLRequest setHTTPMethod:@"GET"] 它开始工作。

原来不是认证的问题,而是web方法名的问题。

我想知道两件事: 1) Web 方法名称应始终为大写字母的规则是什么?或者这是特定于 iOS 的?请注意,不需要身份验证的 Web 服务在没有大写字母的 Web 方法名称下也能正常工作。

2) 在成功验证时设置的验证 cookie 永远不会与任何 NSURLRequest 一起显式发送。那么 iOS 是如何自动将它与 URL 请求一起发送的呢?

最佳答案

来自 the specification :

The Method token indicates the method to be performed on the resource identified by the Request-URI. The method is case-sensitive.

然后它继续列出许多方法名称,所有这些名称都是大写的。

关于ios - HTTP Web 方法名称必须是大写字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741723/

相关文章:

ios - 是否可以在 iOS 中从另一个图像剪切图像?

objective-c - 是否可以使用核心图以与其他部分不同的颜色填充图形的特定部分?

java - 在 servlet 中删除 cookie 时出现问题

node.js 是什么导致错误 400 错误请求

javascript - 正确的异步请求处理 - JS

ios - 从右到左导航中的滑动方向错误

ios - 如何设置 SKScene 的背景图片?

http - Camel : Request Reply Different Endpoint

api - jQuery-旋钮控制Web音频api平移

html - 顶级横幅文字叠加对齐问题