我可以从 NSHTTPURLResponse 中的 HTTP 状态行访问“原因短语”吗

2023-12-19

指定 HTTP 的 RFC 2616 在第 6.1.1 节中表示,状态行的部分是 3 位数字状态代码和文本“原因短语”。

我正在构建一个 iPhone 应用程序,它使用 NSURLConnection 通过 HTTP 访问数据。我可以毫无问题地获取 HTTP 状态代码,但如何访问“原因短语”?

这是我的连接:didReceiveResponse:方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

    httpStatusCode = [httpResponse statusCode];
    // Reason Phrase ??
}

具体来说,我并不是指“代码 xxx 含义的解释”文本。我可以在 RFC 中查找,这些都是静态的。我的意思是服务器在状态行中生成的文本。这种状态行的一个例子是:

HTTP/1.1 412 ClientAppVersion: 0.10 < 0.11

此处的原因短语为“ClientAppVersion: 0.10

这个例子也暗示了我想要做什么。我正在构建一个类似 REST 的 API,因此,我应该使用 HTTP 状态代码来指示错误。但 HTTP 状态代码是为 HTTP 而不是为我的应用程序发明的,因此我尝试将额外的信息塞入原因短语中。


跟进之前的评论(这不完全是您正在寻找的答案)。

HTTP 规范 (RFC 2616) 指出,关于状态代码和原因短语 http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1.1:

状态代码供以下人员使用 自动机和原因短语是 供人类用户使用。这 客户不需要检查或 显示原因短语。

从文本中可以清楚地看出,不应期望 HTTP 客户端读取原因短语。事实上,如果有的话,它通常是可能提供的本地化版本(不一定是服务器发送的版本)。

拥有 HTTP 等标准和规范的目的是能够期望不同的兼容实现(例如您的服务器和 iOS 库)能够互操作。如果你改变规范,你应该预料到会出现问题。特别是,如果您要使用的库不允许您访问原因短语,请不要感到惊讶。

我不太确定如何解释您的评论(“我正在弯曲 HTTP 以使其符合 REST 理念。”)我可以向您保证,REST 可以使用 HTTP 来实现,而无需这种弯曲。我不确定你从哪里得到这个弯曲 HTTP 以适应 REST 想法的想法......

如果您想实现某种方式以 REST 方式给出错误原因,则应在响应消息正文中(甚至可能在自定义标头中)给出原因,而不是在原因短语中给出。即使它是纯文本响应,也比原因短语更好。例如:

代替:

HTTP/1.1 412 ClientAppVersion: 0.10 < 0.11

use:

HTTP/1.1 412 Precondition Failed
Content-Type: text/plain

ClientAppVersion: 0.10 < 0.11

也许:

HTTP/1.1 412 Precondition Failed
Content-Type: text/plain
X-My-Error: ClientAppVersion: 0.10 < 0.11

请注意,无论如何您都应该返回消息正文(除非 204)。状态码 412 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.13也与基于标头的前提条件(您可能正在使用)非常具体相关:

一个或多个给出的前提条件 评估的请求标头字段的数量 测试时为 false 服务器。该响应代码允许 客户提出先决条件 当前资源元信息 (标头字段数据)从而防止 所请求的方法是 应用于除 一个有意的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以从 NSHTTPURLResponse 中的 HTTP 状态行访问“原因短语”吗 的相关文章

  • 在 UITableViewCell 中动态显示秒表计时器

    我想保存计时器值并从新的开始显示它UITableViewCell但我的问题是 我成功地能够在第一个单元格上显示秒表计时器 但是当我尝试在其中添加新单元格时UITableView所以我的计时器设置为第二个单元格 我无法定义如何让我的第一个计时
  • 处理ios设备方向

    我的 uiview 遇到问题 具体取决于设备方向 我遇到的主要问题是 UIDeviceOrientationFaceUp UIDeviceOrientationFaceDown 扰乱了我的视图 我只想支持纵向和横向 左右 因此如果设备改变方
  • 在 UIScrollView 中滚动而不触发 TouchCancelled

    Overview 我正在开发一款 iPhone 游戏 其代码是从另一位开发人员那里继承的 游戏网格是一个 contentSize 为 1000x1000 的 UIScrollView 网格包含通过 OpenGL 的 Texture2D 类在
  • 如何以编程方式从 iPhone 地址簿获取地址占位符文本?

    我试图为用户提供一种在基于位置的应用程序中输入地址的方法 并且我希望它看起来与 iPhone 联系人 地址簿中的地址完全相同 这意味着我需要根据所选国家 地区更新每个字段的占位符文本 例如 美国占位符是 街道 城市 State ZIP 英国
  • 角度报告进度返回上传的文件总数,而不是进度

    在我的组件中我有这个 this authService addPost post subscribe data gt if data type HttpEventType UploadProgress console log data el
  • Vimeo 播放器 JS API 在 iOS 中无法运行

    我正在尝试使用 API 来播放视频 但只有在 iOS 中单击播放器中的播放按钮后它才有效 在桌面版和 Android 版 Chrome 中 它运行良好 http codepen io bdougherty pen JgDfm http co
  • AF网络3问题

    In AFNetworking3 表示我使用的 SSL 证书无效验证证书链 false 但现在看来该字段已被删除 我无法向我的服务器发出请求 这是请求类 import UIKit import AFNetworking class Clie
  • 在屏幕外绘制 uiview

    我想创建一个 UIView 它在调用 ViewDidLoad 时位于屏幕外 但一旦调用某个函数 我就会将其动画显示到屏幕上 用于对 UIView 进行动画处理的代码很好 但我似乎无法从屏幕外绘制 UIView 我已将故事板中的 UIView
  • Firebase获取孩子ID swift ios

    我的 Firebase 看起来像这样 贝娄Active Orders看来childs根据他们的不同有不同的名字UID 用户身份 这是我的代码 用于获取孩子的 ID 无论孩子的名字是什么 但它似乎根本不起作用 获得的正确方法是什么child
  • 运行使用 XCode 7 部署的应用程序会崩溃

    我在 xcode 6 中开发应用程序 然后设备连接 我通过调试运行应用程序 在我可以断开设备与 Xcode 的连接并再次运行应用程序后 它正在运行 但今天开始出现一些问题 我使用 xcode 7 中的运行按钮运行应用程序 gt 应用程序正常
  • 可达性reachabilityWithAddress不起作用

    我正在尝试使用以下代码确定 iPhone 是否可以连接到我的 IP 地址 struct sockaddr in server address server address sin len sizeof server address serv
  • 如何在 iOS 中将 NSData 变量转换为 NSInteger 变量

    我有以下返回的 api 方法NSData 我在另一个视图控制器中调用了这个方法 如何转换NSData to NS整数 NSData getBusXMLAtStop NSString stopnumber NSMutableURLReques
  • kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 帧到 UIImage 转换

    我有一个应用程序可以捕获 kCVPixelFormatType 420YpCbCr8BiPlanarFullRange 格式的实时视频来处理 Y 通道 根据苹果的文档 kCVPixelFormatType 420YpCbCr8BiPlana
  • 继承属性,从 readonly 继承的属性中读写时不会合成 setter

    我在使用属性时发现了一个奇怪的行为 该属性被继承为只读 然后在继承的类中重新声明为读写 In A h interface A NSObject property nonatomic strong readonly NSObject some
  • coreplot 栏点击不工作

    我从 Github 下载了这段代码 https github com gilthonweapps CorePlotBarChartExample https github com gilthonweapps CorePlotBarChart
  • 如何在 iPhone 上缩小 UIPickerView?

    我想降低一个高度UIPickerView在我的 iPhone 应用程序中 使其仅显示一行和一列 选择器视图的高度应等于行的高度 我正在使用 Interface Builder 来构建UIPickerView 但我找不到调整此控件大小的简单方
  • 从 AppDelegate 启动 ViewController

    我有一个自定义 URL 方案 我想打开某个ViewController当我访问此 URL 时 这不是根 我已经能够做到这一点 剩下的就是推动这一点ViewController进入navigationController来自AppDelega
  • 如何使用 AVCaptureVideoPreviewLayer 从相机应用程序实现 2 倍变焦

    我的应用程序中有一个 AVCaptureVideoPreviewLaye 它运行良好 并且显示与相机应用程序相同的预览视频 我想实现相机应用程序的 2 倍变焦功能 我该怎么做呢 基本上 我希望我的预览层将视频源更改为与您在点击 1x 图标将
  • 查询链接到 GeoFire 的 firebase 数据

    读完这些问题后 将 Geofire 位置与 Firebase 条目关联 https stackoverflow com questions 33885733 associate geofire location with firebase
  • iOS Facebook SDK - 远程定义 FacebookAppID

    使用iOS Facebook SDK 3 0 需要在应用程序的info plist中定义FacebookAppID和相关的URL Scheme 我想远程定义这些 向我自己的服务器请求应用程序 ID 所以有两个不同的问题 我可以在运行时更改应

随机推荐

  • Nifi 中并行和顺序处理的等待通知

    我有一个要求 我需要并行执行 4 个作业 并且当在所有 4 个处理器中并行完成相同的项目作业时 然后触发下一个处理器 为此我使用了等待通知 流程就像 4个并行作业 gt notify 释放信号标识符 itemid 信号计数器名称 proce
  • Haskell 程序中比其他语言更容易出现哪些错误?

    备受推崇的功能之一是 如果一个程序可以编译 那么它很可能大部分都是正确的 比用不太复杂或严格的类型系统的语言编写的程序更是如此 也就是说 Haskell 是一个将运行时错误转换为编译器错误的系统 我想知道 用 Haskell 编程是否会出现
  • Flutter - 有状态小部件在切换选项卡时不会保存计数器状态

    我正在学习 flutter 正在使用 tabBars 但在保存状态时遇到问题 我在下面列出了我的问题的一个小工作示例 基本上 有一个按钮和一个状态计数器 当我单击按钮时 我看到文本字段正确更新 但是 当我切换到不同的选项卡并返回时 文本字段
  • 修改HAProxy Lua库路径

    我正在尝试从 HAProxy 加载 Lua 脚本 在 Lua 脚本中 以下行导致错误 local http require socket http 最初我收集自journalctl xe输出表明该库未安装 我安装它使用luarocks in
  • 如何使用tensorflow进行k折交叉验证?

    我正在关注张量流的 IRIS 示例 https github com tensorflow tensorflow tree master tensorflow examples tutorials monitors 我现在的情况是 我将所有
  • 用于开始 Java 源文件的有效关键字

    到目前为止 我知道这些关键字对于开始 java 源文件是有效的 class public import package interface and final 评论补充 abstract strictfp enum 还有吗 感谢所有超级快速
  • 如何在 R 中编写最大似然例程?

    我想对我创建的数据样本运行一些最大似然代码 这是我到目前为止所拥有的 library maxLik data lt replicate 20 rnorm 100 logLikFun lt function param mu lt param
  • 同步数据库 Mysql SQLite [重复]

    这个问题在这里已经有答案了 可能的重复 如何将Android手机上的SQLite数据库与服务器上的MySQL数据库同步 https stackoverflow com questions 6511402 how to sync sqlite
  • Flutter 使用分享意图在 YouTube 上分享视频

    When press on share button It opens the sharing dialog box as shown below When press on youtube it share video on youtub
  • 使用 PHP 脚本发送和接收短信?

    Can a PHP脚本 可以与 MySQL 数据库一起使用 发送和 或接收短信使用某种服务器端解决方案 任何特殊的服务器端应用 或特殊的hardware必需的 以及兼容性 视窗 Linux 像这样的公司还有很多Esendex http ww
  • python 相当于 PHP $_SERVER 是什么?

    我找不到与 PHP SERVER 等效的 python 有没有 或者说 有哪些方法可以带来同等的结果 提前致谢 Using mod wsgi 我会推荐它而不是 mod python 说来话长 但相信我 你的应用程序通过了环境变量例如 def
  • 如何设置 MySQL 进程或线程的最大数量?

    ps axuw grep mysql仅指示 MySQL 进程 但如果我运行 htop 我可以看到 10 行 每一行都有一个单独的 PID 所以我想知道它们是否是由于某种原因我无法使用 ps 看到的线程或进程 在我的开发机器上尝试将它们限制为
  • 访问 DOM Webkit Objective C

    熟悉 webkit 的人能否解释一下或为我指出正确的方向 为什么以下代码不起作用 我想做的是加载一个页面 让 webkit 解析它并简单地打印出标题 这是我所得到的 include
  • ViewPager 中 Fragment 上的 Fragment 不会在方向更改时重新加载

    我正在开发一个使用 ActionBarSherlock 和 ViewPagerIndicator 的 Android 应用程序 主要活动是 SherlockFragmentActivity 用户通过操作栏上的选项卡在片段之间导航 所有选项卡
  • 在 C++ 中从 AVFrame (FFMPEG) 中提取 RGB 值

    我目前正在尝试使用 FFMPEG 读取视频帧 格式为PIX FMT RGB24 对于每个帧 RGB 值都在frame gt data 0 中组合在一起 其中帧的类型为 AVFrame 如何提取每帧的单独 R G 和 B 值 这是为了处理视频
  • 根据另一列中的值删除一列的重复项、Python、Pandas

    我有一个像这样的数据框 Date PlumeO Distance 2014 08 13 13 48 00 754 447905 5 844577 2014 08 13 13 48 00 754 447905 6 888653 2014 08
  • 使用 ORDER BY 和 LIMIT 进行更新在 MYSQL 中不起作用

    我是 MYSQL 的新手 无法解决 甚至在这个论坛上有这么多答案 也无法识别此语句中的错误 我使用的是MYSQL数据库 我有 2 个表 Ratemaster 和 rates 其中客户可以拥有 1 个具有不同费率的产品 因此 客户和产品字段会
  • 本机查询插入后如何在 JPA 中获取返回 ID

    我在 JPA 中有以下代码 用于在使用本机查询插入后返回自动生成的 ID Query q em createNativeQuery insert into returning ID Long class q executeUpdate 但是
  • Ghostscript PDF 到 PNG:输出始终为 595x842 (A4)

    我尝试将 PDF 转换为 PNG 但输出图像始终是 A4 但源 PDF 非常大 这是我的命令 dNOPAUSE dBATCH dSAFER sDEVICE png16m dFirstPage 1 sOutputFile D PDF png
  • 我可以从 NSHTTPURLResponse 中的 HTTP 状态行访问“原因短语”吗

    指定 HTTP 的 RFC 2616 在第 6 1 1 节中表示 状态行的部分是 3 位数字状态代码和文本 原因短语 我正在构建一个 iPhone 应用程序 它使用 NSURLConnection 通过 HTTP 访问数据 我可以毫无问题地