04 24,2014

PHP返回视频流给iOS播放

通过手机上传视频,然后返回URL给IOS进行播放,因为播放地址是通过PHP读取然后返回的,在网页上正常播放,但是在IOS就无法播放。

以下是header头部信息:

HTTP/1.1 200 OK
Server: nginx/1.2.7
Date: Thu, 24 Apr 2014 02:20:29 GMT
Content-Type: video/mp4
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.26
Accept-Ranges: bytes

通过抓包发现IOS请求是通过断点续传的方式。
HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下:

  • 客户端下载一个1024K的文件,已经下载了其中512K
  • 网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:
    Range:bytes=512000-
    这个头通知服务端从文件的512K位置开始传输文件
  • 服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:
    Content-Range:bytes 512000-/1024000
    并且此时服务端返回的HTTP状态码应该是206,而不是200。
04 23,2014

APP客户端上传文件引发NGINX返回411错误

昨天和android客户端联调一个上传接口的时候,客户端报错:”java.io.FileNotFoundException”,因为这个和IOS调试是正常的,然后我这边也没找到程序日记的请求记录,还以为是客户端的问题。

但是客户端查找了半天也没发现问题所在,没办法,查了下nginx的access日记。恍然发现,请求已经过来了,只是nginx返回411错误。

nginx给出的官方解释有三种情况会引发nginx弹411回去

client sent invalid "Content-Length" header
client sent method without "Content-Length" header
client sent "Transfer-Encoding: chunked" header

这个api使用的server正是nginx, 使用multipart提交图片文件的时候因为它忽略或省略了文件的真正的长度, 所以(通过抓包发现)在request header里就压根没有Content-Length. 那显然符合上面的第二种情况.

刚开始让android那边修改代码的,但是涉及到升级的问题,所以最好让服务端解决,google发现了这个nginx的module:nginxHttpChunkinModuleNginxHttpChunkinModule

nginx1.3.9以上的版本不需要这个模块了,所以这个针对的是nginx1.3.9以下的版本。

03 20,2014

xshell的快捷键(非常实用)

删除

ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl
ctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dh
ctrl + k 删除光标后面所有字符相当于VIM里d shift+$
ctrl + u 删除光标前面所有字符相当于VIM里d shift+^
ctrl + w 删除光标前一个单词相当于VIM里db
ctrl + y 恢复ctrl+u上次执行时删除的字符
ctrl + ? 撤消前一次输入
alt + r 撤消前一次动作
alt + d 删除光标所在位置的后单词

移动

ctrl + a 将光标移动到命令行开头相当于VIM里shift+^
ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$
ctrl + f 光标向后移动一个字符相当于VIM里l
ctrl + b 光标向前移动一个字符相当于VIM里h
ctrl + 方向键左键 光标移动到前一个单词开头
ctrl + 方向键右键 光标移动到后一个单词结尾
ctrl + x 在上次光标所在字符和当前光标所在字符之间跳转
alt + f 跳到光标所在位置单词尾部

替换

ctrl + t 将光标当前字符与前面一个字符替换
alt + t 交换两个光标当前所处位置单词和光标前一个单词
alt + u 把光标当前位置单词变为大写
alt + l 把光标当前位置单词变为小写
alt + c 把光标当前位置单词头一个字母变为大写
^oldstr^newstr 替换前一次命令中字符串

历史命令编辑

ctrl + p 返回上一次输入命令字符
ctrl + r 输入单词搜索历史命令
alt + p 输入字符查找与字符相接近的历史命令
alt + > 返回上一次执行命令

其它

ctrl + s 锁住终端
ctrl + q 解锁终端
ctrl + l 清屏相当于命令clear
ctrl + c 另起一行
ctrl + i 类似TAB健补全功能
ctrl + o 重复执行命令
alt + 数字键 操作的次数

上一页