关于企业版 OTA发布

本文深入解析HTTP响应码的含义及其应用场景,并分享了在开发过程中如何有效利用各种开发工具,旨在提升开发者的实践能力与效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽说要离开个性了,但是我还是会站好最后一班岗,打企业的包 在itunes里装 没有问题 上午主要看了下web的OTA发布,下面教程将步骤等一一记录,希望可以帮到以后 遇到的朋友们,首先申请邓白氏码,企业证书包括新建app id,企业证书的制作,以上内容 网上一大堆,所以这里就不详细描述,下边步骤为以上资料都齐全后 打包 放到web的步骤
1.修改project的bundle id,找到正确的证书,
QQ20130916-22.进行archive

QQ20130916-3

 

3.archive后部分信息的确认

QQ20130916-44.进行distribute

QQ20130916-5QQ20130916-65.针对企业版做plist文件的制作

QQ20130916-7save for enterprise 必须勾选 

图中标记信息部分必填 部分选填

1.app的ipa文件 具体存放的路径

2.app 的title

3.副标题

4.大icon的url 地址

5.小icon得url 地址

 

 

6.以上完成之后  需要一个静态的html 用于展示和点击下载  html的模板代码我放到下边的demo中

QQ20130916-8

 

可以点击我下载 

7.我的到此为止 都可以使用   具体模板  自己修改 只要将plist 文件写对

如果有个别   如果有问题 及时交流

自定义播放器的那些坑啊 (一)

老长时间不写技术博客了,最近的项目 由于要自定义播放器,其中遇到了很多灵异和未知的问题   我打算在封装完  写一个完整版教程,现在把一些琐碎的知识点  记录下来,第一篇  便是困扰了我两小时的C语言与OC 互调的问题,最终发现自己没仔细看文档,下次一定要注意,也提醒广大开发者,苹果既然敢搞SDK 给大家,就一定有办法解决我们遇到了绝大多数问题,当遇到不会的时候 可以google 相关关键字,然后 着重看文档,如果文档没有说明,那即使你靠其他方法实现了 也不一定能通过Apple 的审核,废话不说了,先上第一个坑:

获取系统声音 和 更改系统声音
准备工作

添加AudioToolBox.framework

1.首先注册 监听音量键按下的代码

    
  1. //添加对声音大小的判断
  2. OSStatus s =AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume,
  3. audioVolumeChangeListenerCallback,
  4. _volumeSlider); //_volumeSlider 此参数为Void * 类型,传需要更改UI界面的控件
  5. if (s == kAudioSessionNoError) {
  6. NSLog(@"监听音量键成功");
  7. }
  8. else{
  9. NSLog(@"监听音量键失败");
  10. }

2.监听回调函数

    
  1. void audioVolumeChangeListenerCallback (void*inUserData,
  2. AudioSessionPropertyID inPropertyID,
  3. UInt32 inPropertyValueSize,
  4. const void *inPropertyValue)
  5. {
  6. if (inPropertyID !=kAudioSessionProperty_CurrentHardwareOutputVolume)return;
  7. Float32 value = *(Float32 *)inPropertyValue;
  8. NSLog(@"value is %f",value);
  9. UISlider * volumeSlider = ( UISlider *) inUserData; //最为关键的一部 看的懂就看 看不懂就算了
  10. volumeSlider.value = value;
  11. }

3.获得当前音量代码

    
  1. float volume= [MPMusicPlayerControllerapplicationMusicPlayer].volume;

4.修改当前音量的代码

    
  1. MPMusicPlayerController applicationMusicPlayer].volume= 你赋的值;

5.完成 完不成的,重复以上步骤 如有疑问,首页联系邮箱

有关邮件协议

上学的时候  知道SMTP 和 POP3,25号port和110port,  但对于IMAP不太了解,一般收发邮件 都会用到IMAP 和 POP 的收,于是 我就查了下他们的区别

如何使用IMAP服务?

IMAP是什么?
IMAP,即 Internet  Message  Access  Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
IMAP和POP有什么区别?
POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:移动邮件、标记已读等),这是不会反馈到服务器上的,比如:您通过电子邮件客户端收取了QQ邮箱中的3封邮件并移动到了其他文件夹,这些移动动作是不会反馈到服务器上的,也就是说,QQ邮箱服务器上的这些邮件是没有同时被移动的 。但是IMAP就不同了,电子邮件客户端的操作都会反馈到服务器上,您对邮件进行的操作(如:移动邮件、标记已读等),服务器上的邮件也会做相应的动作。也就是说,IMAP是“双向”的。
同时,IMAP可以只下载邮件的主题,只有当您真正需要的时候,才会下载邮件的所有内容。
IMAP 非安全链接 是143port

ios 联网 在mac机器上进行抓包

Remote Virtual Interface
在使用Mac抓取iPhone数据包中介绍了两种方式在Mac电脑上抓取iPhone上的数据包,一是使用Mac的网络共享功能将Mac的网络通过WiFi共享给iPhone连接,一是使用代理软件在Mac上建立HTTP代理服务器;这两种方式都是将iPhone的网络流量导入到Mac电脑中,通过Mac连接互联网,这就要求Mac本身是联网的,对于网络共享的方式还要求Mac本身的网络不能使用WiFi,而且在iPhone上全是使用的WiFi连接,不能抓取2G/3G网络的包。
在iOS5中新引入了“远程虚拟接口(remote virtual interface ,RVI)“的特性,可以在Mac中建立一个虚拟网络接口来作为iOS设备的网络栈,这样所有经过iOS设备的流量都会经过此虚拟接口,此虚拟接口代替了iOS设备本身的协议栈,但并没有将网络流量中转到Mac本身的网络连接上,这样所有网络连接都是iOS设备本身的,Mac电脑本身连不联网或者连接的网络类型都没有关系,而iOS设备本身可以为任意网络类型,2G/3G/WiFi等。在Mac电脑上使用任意抓包工具抓取RVI接口上的数据包就可以看到iOS设备上的所有网络数据。

二.使用方法
1.通过USB口将iPhone连接到Mac上。
2.使用Xcode的organizer工具获取到iPhone的UDID
3.使用rvictl命令创建RVI接口(remote virtual interface),使用iPhone的UDID作为参数。
$ rvictl -s <UDID>

QQ20130613-7

4.如果想捕获多个设备的网络包,可以使用上述命令创建多个设备的RVI,传递每个iOS设备的UDID作为参数即可。
RVI虚拟接口的命名规则为rvi0,rvi1,rvi2,…,可使用ifconfig命令查看

$ ifconfig rvi0

rvi0: flags=3005<UP,DEBUG,LINK0,LINK1> mtu 0
5.在Mac上使用任意抓包工具tcpdump、wireshark等,监听创建的rvi接口即可。
下面是wireshark 的简单使用(由于新的mac 需要去下载x11等 组件,这里环境默认wireshark 是正常工作的)

第一步:QQ20130613-1

第二步:

QQ20130613-2

 

第三:QQ20130613-3

第四步:

QQ20130613-4

 

第五步:

QQ20130613-5

 

以上便是抓的数据包  由于我对协议有些过滤 所以 某些协议没有显示  如果只想看某一种 协议可在 过滤栏 写要过滤的 然后点Applay

QQ20130613-6

 

然后就是你对wireshark 抓到数据的分析了,这里不做具体解释和操作

6.使用完之后需要将创建的虚拟接口移除

$ rvictl -x <UDID>

QQ20130613-8

ASIhttp 的timeout 的“Bug”

很早之前 我听说过 ASIHttp 的Timeout 会有一个什么30s 的bug,今天也是由于设定的timeout 要比真正的timeout 少了很多,但是有规律的,
于是 我去看了看 ASIHttp 的代码

    
  1. - (BOOL)shouldTimeOut
  2. {
  3. NSTimeInterval secondsSinceLastActivity = [[NSDatedate] timeIntervalSinceDate:lastActivityTime];
  4. // See if we need to timeout
  5. if ([self readStream] && [self readStreamIsScheduled]&& [self lastActivityTime] && [self timeOutSeconds] >0 && secondsSinceLastActivity > [self timeOutSeconds]){
  6. // We have no body, or we've sent more than the upload buffer size,so we can safely time out here
  7. if ([self postLength] == 0 || ([selfuploadBufferSize] > 0 && [self totalBytesSent] > [selfuploadBufferSize])) {
  8. return YES;
  9. // ***Black magic warning***
  10. // We have a body, but we've taken longer than timeOutSeconds to upload the first small chunk of data
  11. // Since there's no reliable way to track upload progress for the first 32KB (iPhone) or 128KB (Mac) with CFNetwork, we'll be slightly more forgiving on the timeout, as there's a strong chance our connection is just very slow.
  12. } else if (secondsSinceLastActivity > [selftimeOutSeconds]*1.5) {
  13. return YES;
  14. }
  15. }
  16. return NO;
  17. }

请注意一下字段 和 代码

// ***Black magic warning***
// We have a body, but we’ve taken longer than timeOutSeconds to upload the first small chunk of data
// Since there’s no reliable way to track upload progress for the first 32KB (iPhone) or 128KB (Mac) with CFNetwork, we’ll be slightly more forgiving on the timeout, as there’s a strong chance our connection is just very slow.

else if (secondsSinceLastActivity > [self timeOutSeconds]*1.5) {
return YES;
}
}

ASIHttp 会将你的timeout 扩大一半,由于默认的timeout 为60.0s 所以 asihttp 多出来的30s所谓的”bug“ 只不过是 认为延长了timeout 时间而已

在不支持AirDrop的Mac上开启和使用AirDrop的方法

苹果为OS X 10.7 Lion系统加入了全新的AirDrop功能,该功能允许两台Mac之间无线传输文件,用户无需设置,只需要打开AirDrop文件夹即可查看到其他用户,分享文件变得非常容易。问题是并不是所有的Mac都支持AirDrop功能,下面是所有支持AirDrop功能的Mac机型:

2008年末期或更新的MacBook Pro
2010年末期或更新的MacBook Air
2008年末期或更新的MacBook
2009年初期或更新的iMac
2010年中期或更新的Mac mini

2009年初配备AirPort Extreme网卡或2010年中期的Mac Pro
需要注意的是2008年末期的17寸MacBook Pro和2008年末期的小白MacBook都不支持AirDrop功能

 

拥有这些机型的用户其实可以使用有线以太网实现AirDrop功能。首先你需要将你的Mac连接至有线网络,然后打开终端,输入下面的命令行:

 

    
  1. defaults write com.apple.NetworkBrowserBrowseAllInterfaces 1

回车确认后,重启Mac。打开Finder后,你就可以看到AirDrop出现在左侧的边栏之中。
这时你就可以使用AirDrop功能向其他Mac发送或接受文件了。
把上面命令中的1改为0即可关闭AirDrop功能。

Xcode 的code snippet

 

在上家公司,我在同非的帮助下,弄了几个Code Snippet,但来了新公司由于新的办公环境,以至于我已经忘记了怎么去添加了,所以自己Baidu了下,

通过code snippets,我们可以创建一些可重用的代码块,并且在任何需要的地方很容易的就可以使用这些代码 块。这可以节省输入需要的操作和时间。并且,一旦你学会使用code snippets,会发现你可以创建并扩充自己的 code snippet library。

1. 创建一个code snippet非常简单。首先,打开Xcode并在utilities panel中选择code snippet library。

code Snippet 的位置

code Snippet 的位置

2.在xcode 里找到代码段 拖到刚才的code snippet library 里

Xcode 里的代码

 

3.在code snippet library 里会看到如下 新增一个小块 QQ20130607-4

 

 

 

 

 

 

 

4.单击此项 可看到 如下图

QQ20130607-5

 

5.点击Edit



QQ20130607-8

6.我们如果  想像函数一样 做成可传参的  需要在可变字段 加上<# 可变字段 #>

QQ20130607-9

 

7.然后 DoneQQ20130607-7
8.xcode 里 输入 DR 便会有提示了  这是个最简单的演示  可以嵌套更为复杂的代码块  自己可以随意拓展


QQ20130607-10

 

 

TCP/IP,http,socket,长连接,短连接 概念 区分

之前对这几个概念有点糊涂,查阅了些资料,稍微概括下他们的区别吧。如有错误,请拍~~~

TCP/IP是什么?
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
Socket是什么呢?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,一组接口,把复杂的TCP/IP协议族隐藏在Socket接口后面。
所以HTTP就是TCP/IP应用层的协议。Socket是他们的软件抽象层。

 
短连接:
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。

 
长连接:
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
http的长连接:
HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行持久连接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌
似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

参考资料:
http://blog.youkuaiyun.com/xijiaohuangcao/article/details/6105623——《写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket》
http://hi.baidu.com/loleafver/blog/item/a222c9d853d4f1e638012fa0.html——《http长连接和短连接》
http://hi.baidu.com/einsof/blog/item/f2f3a84b5d1a30fb82025ca0.html——《什么是短连接、长连接、Socket》
================================================
socket

Socket协议的形象描述
socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意思。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。

通常短连接是这样:连接->传输数据->关闭连接
那什么是长连接?一般长连接相对短连接而言的,长连接在传输完数后不关闭连接,而不断的发送包保持连接等待处理下一个数据包。
such as: 连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。

那什么时候用短连接呢?
一般长连接用于少数client-end to server-end的频繁的通信,例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源。(查看来源)

TCP/IP通信解读长短链接

一。通信方式
主要有以下三大类:
(一)SERVER/CLIENT方式
1.一个Client方连接一个Server方,或称点对点(peer to peer):
2.多个Client方连接一个Server方,这也是通常的并发服务器方式。
3.一个Client方连接多个Server方,这种方式很少见,主要
用于一个客户向多个服务器发送请求情况。

(二)连接方式
1.长连接
Client方与Server方先建立通讯连接,连接建立后不断开,
然后再进行报文发送和接收。这种方式下由于通讯连接一直
存在,可以用下面命令查看连接是否建立:
netstat –f inet|grep 端口号(如5678)。
此种方式常用于点对点通讯。

2.短连接
Client方与Server每进行一次报文收发交易时才进行通讯连
接,交易完毕后立即断开连接。此种方式常用于一点对多点
通讯,比如多个Client连接一个Server.

(三)发送接收方式
1.异步
报文发送和接收是分开的,相互独立的,互不影响。这种方
式又分两种情况:
(1)异步双工:接收和发送在同一个程序中,有两个不同的
子进程分别负责发送和接收
(2)异步单工:接收和发送是用两个不同的程序来完成。
2.同步
报文发送和接收是同步进行,既报文发送后等待接收返回报文。
同步方式一般需要考虑超时问题,即报文发上去后不能无限等
待,需要设定超时时间,超过该时间发送方不再等待读返回报
文,直接通知超时返回。

实际通信方式是这三类通信方式的组合。比如一般书上提供的
TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的
组合是基本不用的,比较常用的有价值的组合是以下几种:

同步短连接Server/Client
同步长连接Server/Client
异步短连接Server/Client
异步长连接双工Server/Client
异步长连接单工Server/Client

其中异步长连接双工是最为复杂的一种通信方式,有时候经
常会出现在不同银行或不同城市之间的两套系统之间的通信。
比如金卡工程。由于这几种通信方式比较固定,所以可以预
先编制这几种通信方式的模板程序。

二.报文格式
通信报文格式多样性更多,相应地就必须设计对应的读写报文的接
收和发送报文函数。

(一)阻塞与非阻塞方式
1.非阻塞方式
读函数不停地进行读动作,如果没有报文接收到,等待一段时间后
超时返回,这种情况一般需要指定超时时间。
2.阻塞方式
如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。

(二)循环读写方式
1.一次直接读写报文
在一次接收或发送报文动作中一次性不加分别地全部读取或全部
发送报文字节。
2.不指定长度循环读写
这一般发生在短连接进程中,受网络路由等限制,一次较长的报
文可能在网络传输过程中被分解成了好几个包。一次读取可能不
能全部读完一次报文,这就需要循环读报文,直到读完为止。

3.带长度报文头循环读写
这种情况一般是在长连接进程中,由于在长连接中没有条件能够
判断循环读写什么时候结束,所以必须要加长度报文头。读函数
先是读取报文头的长度,再根据这个长度去读报文.实际情况中,
报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须
转换成ASCII,常见的报文头码制有:
(1)n个字节的ASCII码
(2)n个字节的BCD码
(3)n个字节的网络整型码

Http 响应码

上周三面试,被人问到一些关于http 响应码的问题,问及200,说出了成功,404,502 这种常见的我都能答出来, 我只知道是400,500是服务器问题,
但真正含义真不清楚,明天要去面试,特意搜了下响应码的含义,希望下次被问到 不会答得不完美吧~~

一、HTTP响应码
响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。

响应码分五种类型,由它们的第一位数字表示:
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误,请求包含语法错误或者请求无法实现
5xx:服务器错误,服务器不能实现一种明显无效的请求

下表显示每个响应码及其含义:
100 继续
101 分组交换协
200 OK
201 被创建
202 被采纳
203 非授权信息
204 无内容
205 重置内容
206 部分内容
300 多选项
301 永久地传送
302 找到
303 参见其他
304 未改动
305 使用代理
307 暂时重定向
400 错误请求
401 未授权
402 要求付费
403 禁止
404 未找到
405 不允许的方法
406 不被采纳
407 要求代理授权
408 请求超时
409 冲突
410 过期的
411 要求的长度
412 前提不成立
413 请求实例太大
414 请求URI太大
415 不支持的媒体类型
416 无法满足的请求范围
417 失败的预期
500 内部服务器错误
501 未被使用
502 网关错误
503 不可用的服务
504 网关超时
505 HTTP版本未被支持

二、HTTP头标
头标由主键/值对组成。它们描述客户端或者服务器的属性、被传输的资源以及应该实现连接。

四种不同类型的头标:
1.通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。
2.请求头标:允许客户端传递关于自身的信息和希望的响应形式。
3.响应头标:服务器和于传递自身信息的响应。
4.实体头标:定义被传送资源的信息。即可用于请求,也可用于响应。

头标格式::

下表描述在HTTP/1.1中用到的头标
Accept 定义客户端可以处 理的媒体类型,按优先级排序;
在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept: image/jpeg,image/png,*/*
Accept-Charset
定义客户端可以处理的字符集,按优先级排序;
在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept-Charset: iso- 8859-1,*,utf-8

Accept-Encoding 定义客户端可以理解的编码机制。例如:Accept-Encoding:gzip,compress
Accept-Language 定义客户端乐于接受的自然语言列表。例如:Accept-Language: en,de

Accept-Ranges
一个响应头标,它允许服务器指明:将在给定的偏移和长度处,为资源组成部分的接受请求。
该头标的值被理解为请求范围的度量单位。例如Accept-Ranges: bytes或Accept- Ranges: nonea

Age 允许服务器规定自服务器 生成该响应以来所经过的时间长度,以秒为单位。
该头标主要用于缓存响应。例如:Age: 30

Allow 一个响应头标,它定义一个由位于请求URI中的次源所支持的HTTP方法列表。例如:Allow: GET,PUT

aUTHORIZATION
一个响应头标,用于定义访问一种资源所必需的授权(域和被编码的用户ID与口令)。
例如:Authorization: Basic YXV0aG9yOnBoaWw=

Cache-Control 一 个用于定义缓存指令的通用头标。例如:Cache-Control: max-age=30
Connection 一 个用于表明是否保存socket连接为开放的通用头标。例如:Connection: close或Connection: keep-alive

Content-Base
一种定义基本URI的实体头标,为了在实体范围内解析相对URLs。
如果没有定义Content-Base头标解析相对URLs,使用Content-Location URI(存在且绝对)或使 用URI请求。
例如:Content-Base: Http://www.myweb.com

Content-Encoding 一 种介质类型修饰符,标明一个实体是如何编码的。例如:Content-Encoding: zip
Content-Language 用 于指定在输入流中数据的自然语言类型。例如:Content-Language: en
Content-Length 指定包含于请求或响应中数据的字节长度。例如:Content-Length:382

Content-Location
指定包含于请求或响应中的资源定位(URI)。
如果是一绝。对URL它也作为被解析实体的相对URL的出发点。
例如:Content-Location: http://www.myweb.com/news

Content-MD5
实体的一种MD5摘要,用作校验和。
发送方和接受方都计算MD5摘要,接受方将其计算的值与此头标中传递的值进行比较。
例如:Content-MD5:

Content-Range
随部分实体一同发送;标明被插入字节的低位与高位字节偏移,也标明此实体的总长度。
例如:Content-Range: 1001-2000/5000

Contern-Type 标明发送或者接收的实体的MIME类型。例如:Content-Type: text/html
Date 发送HTTP消息的日期。例如:Date: Mon,10PR 18:42:51 GMT

ETag 一种实体头标,它向被发送的资源分派一个唯一的标识符。
对于可以使用多种URL请求的资源,ETag可以用于确定实际被发送的资源是否为同一资源。
例如:ETag: ”208f-419e-30f8dc99″

Expires 指定实体的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
Form 一种请求头标,给定控制用户代理的人工用户的电子邮件地址。例如:From: webmaster@myweb.com
Host 被请求资源的主机名。对于使用HTTP/1.1的请求而言,此域是强制性的。例 如:Host: www.myweb.com

If-Modified-Since
如果包含了GET请求,导致该请求条件性地依赖于资源上次修改日期。
如果出现了此头标,并且自指定日期以来,此资源已被修改,应该反回一个304响应代码。
例如:If-Modified-Since: Mon,10PR 18:42:51 GMT

If-Match 如果包含于一个请求,指定一个或者多个实体标记。只发送其ETag与列表中标记区配的资源。
例如:If-Match: ”208f-419e-308dc99″

If-None-Match
如果包含一个请求,指定一个或者多个实体标记。资源的ETag不与列表中的任何一个条件匹配,操作才执行。
例如:If-None-Match: ”208f-419e-308dc99″

If-Range
指定资源的一个实体标记,客户端已经拥有此资源的一个拷贝。必须与Range头标一同使用。
如果此实体自上次被客户端检索以来,还不曾修改过,那么服务器只发送指定的范围,否则它将发送整个资源。
例如:Range: byte=0-499If-Range:”208f-419e- 30f8dc99″

If-Unmodified-Since
只有自指定的日期以来,被请求的实体还不曾被修改过,才会返回此实体。
例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT

Last-Modified 指定被请求资源上次被修改的日期和时间。例如:Last- Modified: Mon,10PR 18:42:51 GMT
Location
对于一个已经移动的资源,用于重定向请求者至另一个位置。
与状态编码302(暂时移动)或者301(永久性移动)配合使用。
例如:Location: http://www2.myweb.com/index.jsp

Max-Forwards
一个用于TRACE方法的请求头标,以指定代理或网关的最大数目,该请求通过网关才得以路由。
在通过请求传递之前,代理或网关应该减少此数目。例如:Max-Forwards: 3

Pragma 一个通用头标,它发送实现相关的信息。例如:Pragma: no-cache
Proxy-Authenticate
类似于WWW-Authenticate,便是有意请求只来自请求链(代理)的下一个服务器的认证。
例如:Proxy-Authenticate: Basic realm-admin

Proxy-Proxy-Authorization
类似于授权,但并非有意传递任何比在即时服务器链中更进一步的内容。
例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=

Public 列表显示服务器所支持的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
Range 指定一种度量单位和一个部分被请求资源的偏移范围。例如:Range: bytes=206-5513

Refener
一种请求头标域,标明产生请求的初始资源。对于HTML表单,它包含此表单的Web页面的地址。
例如:Refener: http://www.myweb.com/news/search.html

Retry-After
一种响应头标域,由服务器与状态编码503(无法提供服务)配合发送,以标明再次请求之前应该等待多长时间。
此时间即可以是一种日期,也可以是一种秒单位。例如:Retry-After: 18

Server 一种标明Web服务器软件及其版本号的头标。例 如:Server: Apache/2.0.46(Win32)
Transfer-Encoding 一种通用头标,标明对应被接受方反向的消息体实施变换的类型。例如:Transfer- Encoding: chunked

Upgrade
允许服务器指定一种新的协议或者新的协议版本,与响应编码101(切换协议)配合使用。
例如:Upgrade: HTTP/2.0

User-Agent
定义用于产生请求的软件类型(典型的如Web浏览器)。
例如:User- Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)

Vary 一个响应头标,用于表示使用服务器驱动的协商从可用的响应表示中选择响应实体。例如:Vary: *
Via 一个包含所有中间主机和协议的通用头标,用于满足请求。例 如:Via: 1.0 fred.com, 1.1 wilma.com
Warning 用于提供关于响应状态补充信息的响应头标。例 如:Warning: 99 www.myweb.com Piano needs tuning

www-Authenticate
一个提示用户代理提供用户名和口令的响应头标,与状态编码401(未授权)配合使用。响应一个授权头标。
例如:www-Authenticate: Basic realm=zxm.mgmt

更详细的响应码解释:

http://www.51testing.com/index.php?uid-194313-action-viewspace-itemid-213714

http://www.java3z.com/cwbwebhome/article/article2/2406.html?id=1093

字典数组转json字符串时 中文乱码

由于某项目的特殊性 需要把一个字典弄成 json字符串形式 上传
原来我用了 一个sbjson的拓展类 用着没问题 所以经验主义 告诉我 可以拿来直接用
但现在发现当字典中 有中文时 json时出乱码
然后 一直纠结于 那个字典的类别方法QQ20130515-3

    
  1. @interface NSDictionary (BSJSONAdditions)
  2. + (NSDictionary *)dictionaryWithJSONString:(NSString*)jsonString;
  3.  
  4. - (NSString *)jsonStringValue;
  5. - (NSString *)jsonStringValueWithIndentLevel:(NSInteger)level;
  6. @end

纠结于 jsonStringValue 里边的实现 到最底层 看了执行 此方法 会出现乱码

    
  1. - (NSString *)jsonStringValue
  2. {
  3. NSMutableString *jsonString = [[NSMutableStringalloc] init];
  4. [jsonString appendString:jsonStringDelimiterString];
  5. // Build the result one character at a time, inserting escaped characters as necessary
  6. NSInteger i;
  7. unichar nextChar;
  8. for (i = 0; i < [self length]; i++) {
  9. nextChar = [self characterAtIndex:i];
  10. switch (nextChar) {
  11. case '\"':
  12. [jsonString appendString:@"\\\""];
  13. break;
  14. case '\\':
  15. [jsonString appendString:@"\\\\"];
  16. break;
  17. case '/':
  18. [jsonString appendString:@"\\/"];
  19. break;
  20. case '\b':
  21. [jsonString appendString:@"\\b"];
  22. break;
  23. case '\f':
  24. [jsonString appendString:@"\\f"];
  25. break;
  26. case '\n':
  27. [jsonString appendString:@"\\n"];
  28. break;
  29. case '\r':
  30. [jsonString appendString:@"\\r"];
  31. break;
  32. case '\t':
  33. [jsonString appendString:@"\\t"];
  34. break;
  35. /* TODO: Find and encode unicode characters here?
  36. case '\u':
  37. [jsonString appendString:@"\\n"];
  38. break;
  39. */
  40. default:
  41. [jsonString appendFormat:@"%c", nextChar];
  42. break;
  43. }
  44. }
  45. [jsonString appendString:jsonStringDelimiterString];
  46. return [jsonString autorelease];
  47. }

由于对编码格式 也不是特别清楚 我的理解是 汉字和字母 和 数字占位是不一样的 这里的方法 貌似只针对于 字母和数字 所以传的汉字 会出错

    
  1. unichar nextChar;
  2. for (i = 0; i < [self length]; i++) {
  3. nextChar = [self characterAtIndex:i];
  4. ..........
  5. }

后来在 毛线兄弟的引导下,用了

    
  1. SBJsonWriter *jsonWriter = [[SBJsonWriteralloc]init];
  2. NSString * paramString = [jsonWriter stringWithObject:self.param];
  3. NSLog(@"paramString is %@",paramString);
  4. [jsonWriter release];

解决问题,好好记录一下,虽说这么用的不是很多 不过 可以数据本地持久化 又增添了一种新方法 存jsonString,复杂类型的数据可以这么存


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值