php curl 支持所有http协议支持的东西,比如简单的GET , POST , HEAD , PUT,DELETE, 稍微复杂一点的SSL,proxy,COOKIE 等操作。http超文本传输, 比如网站地址是 wwww.hhailuo.com(红海螺) , web服务器配置的根目录 /home/html 。 web服务器运行以用户/用户组为user/user运行。
以上面为前提,先讲讲GET , 举个最简单的GET
1. 用户: 我想要获取红海螺网站/home/html/ico.png 图片,如果user组具有权限 , 浏览器输入 www.hhailuo.com/ico.png.
服务器: 好的,给你。图片正文如下 xxxxx .
静态文件通常服务器直接发给用户了。
php curl GET :最简单的例子就是页面采集,通过curl 实现浏览器一样的GET行为。
2. 用户: 我想获取红海螺网站文章,id为3 .
服务器: 找你找的好辛苦,饶了一大圈才找到你,然后把文章id为3的文章发给用户.
php动态请求,就是说我请求 www.hhailuo.com/a.php . 从这个url中是看不出服务器要转发给用户内容,服务器要把www.hhailuo.com/a.php 解析了才会转发,也就是说可能中间有各种各样的通信,但只要请求存在,程序固定,红海螺网站文章id 为3的文本在红海螺服务器中固定了。
讲讲POST,举个简单例子
1 . 用户: 场景是用户注册,用户名为a9618211, 密码为 “你好” 等一些信息。 用户浏览器访问 www.hhailuo.com/User/login 填写表单,提交到 admin.hhailuo.com/User/Register 。
服务器: 好的,已经收到了你提交的数据,然后做相关的处理,转发或者不转发东西给用户,但可能会把用户提交的数据写数据库或者写文件,也就是存到文件或缓存。
php curl POST: 就是不通过浏览器要把文件,表单数据,文本,图片,视频等一些东西提交到指定的地方。 相对于浏览器操作有更强的灵活性,以及适应于很多应用场景。
应用场景就是查分系统,作为用户我需要登录才能查到自己的分数。比如用户A第一步登录,第二步点击某个url 查看分数,相当于请求了两次。大家都清楚http是无状态的请求协议,
第二次请求的时候,服务器怎么知道是用户A的请求呢。 从源头分析,访问服务器用的是浏览器。 对的,浏览器有标实用户的身份东西cookie文件 . 但cookie 又是怎样工作的呢。玩php的人
都知道,服务器会释放所有保存在内存和文件外的所以信息。 服务器中保存了session 文件. 关于浏览器中的cookie怎么找到session的呢,肯定是发起http请求的时候把cookie中保存的session作为tcp
的某个头部参数传递过去,然后服务器先验证用户的身份,再进行相关处理。 php curl 不是浏览器发起的行为,怎么办呢,有很多种方式处理,但主要的目的就是用curl 把cookie文件给包含进去 .
讲讲 HEAD
HEAD应该大家用的也非常多
HTTP header的学习非常重要,可能大家容易忽略。 简单介绍下我们经常用到的header .
讲讲浏览器和服务器之间消息传递的流程,内容主要包括message-header和message-body两部分。首先传递http-header 就是message-header消息 。http -header 消息通常被分为4个部分:general header, request header, response header, entity header。通过header再判断message-body 是否需要传递。
先讲下keepalive ,应用场景:用户A 访问了a.php ,又访问了b.php , c.php 等等。那么问题来了,大家都知道HTTP是 TCP加了个头部,每次用户A输入浏览器请求都会和服务器端建立TCP长连接。
那么问题来了,一个网页可能有很多资源,比如图片,css文件,js文件,flash 等。 浏览器和服务器如果没有建立长连接,如果资源数过多,消耗在TCP连接的时间就太多了。 用户每次请求都需要建立连接。
需要深入了解的同学可以找找资料关于最大连接数以及过期时间一些东西的设置,为什么要这样做。
然后聊聊浏览器cache , 大多数情况下我们会很明显的感觉到访问同一个地址,第一次会比其后面访问慢很多,这就是浏览器cache .就是说我们很多资源都被缓存到浏览器了,比如图片,js文件,cs文件,flash等。但为什么程序员写代码的时候经常喜欢在文件名后面跟随其它的日期呢。 主要的原因还是担心服务器版本改了,浏览器一直用本地的版本。 从这里你应该能体会到先发header 信息,再拿消息体的好处了。通过后缀或者大小判断文件是否更新,更新了才传递消息体给用户,否则只需要传递header信息,通知用户没有更新,也就是常说的304 (If-Modified-Since) 用户是否在指定的时间内更新了文件。
聊聊浏览器压缩,因为浏览器是某个厂商制作的cpp应用程序,常用的压缩方式gzip , 也就是说传输消息体的时候可能会比较大,那么浏览器和服务器就商量好,我用某种算法把文件压缩了,你用解密算法把文件解压出来。这样
可以减少传输过程中消息体的大小。
聊聊浏览器编码,除了英语外浏览器可以支持其它的编码格式,如果每一个不同编码格式代表不同国家的文字。 比如我网页的编码是中国,你后端传一些法国的文字过来,我用中国的一些字符去匹配那肯定有很多事找不到的,因此就出现乱码了。 问题来了, 我们就需要建立一个编码公共库,把每个国家的所有文字都包含进去。对,这就是utf-8 . 现在明白乱码的原因了不。
写了很多了后续再详细讲解Header , SSL, proxy等一些相关的知识 .
小提
原文地址:http://blog.csdn.net/blankti/article/details/43332931