HTTP协议:超文本传输协议
HTTP协议:超文本传输协议
建立在TCP/IP协议基础上的
我们的WEB开发数据的传输都是依赖于HTTP协议
http协议的 http请求(request)
基本结构
请求行
消息头
消息体(实体内容)
GET /http/http1.php HTTP/1.1   
//表示发送的GET请求,请求资源是/http/http1.php 
Accept: */*   
//表示客户端可以接受任何数据
Accept-Language: zh-CN
//表示支持页面语言
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
//告诉服务器我的浏览器的内核,操作系统
Accept-Encoding: gzip, deflate
//表示接受什么样的数据压缩格式
Host: localhost
//主机:80
Connection: Keep-Alive
//表示不要立即断掉我们的请求
客户端给服务器发送的东西:
$_SERVER全局数组
在服务器端,我们可以通过$_server来获取我们需要的信息
REMOTE_ADDR=127.0.0.1  //访问该页面的IP
DOCUMENT_ROOT=C:/myphp/apache/htdocs 可以获取apache 的主目录
REQUEST_URI=/http/http1.php 可以获取 请求的资源名
HTTP请求方式 POST,GET(常用)
get/post区别:
1,安全性 get请求的数据会显示在地址栏,post请求数据,放在http的消息体中
2,从可以提交数据的大小看,
 2.1,http协议本身并没有对数据大小进行限制
 2.2,浏览器在对get和post进行限制,大数据量用post请求
3,get请求可以更好的添加到收藏夹
如何防盗链:
Referer: http://localhost/http/http1.php
strpos(字符串,字母)//字母在字符串首次出现的位置
if(strpos($_SERVER['Referer']," http://localhost/http")==0){
    echo "可以访问";
}else{
    echo"不可访问";
}
HTTP响应:
HTTP/1.1 200 OK        //200OK表示请求成功
Date: Sun, 16 Dec 2012 14:58:39 GMT        //告诉浏览器 请求页面的时间
Server: Apache/2.2.22 (Win32) PHP/5.3.5    //表示告诉浏览器 服务器的情况
X-Powered-By: PHP/5.3.5        
Content-Length: 18        //表示回送的数据有18个字节
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Last-Modified:Tue,11 Jul 2000 18:23:51 GMT//表示浏览器请求的页面更新时间
Content-Type: text/html            //文档类型
<img src="12.jpg">
http的状态码说明
 

例子:302状态码的使用
比如访问a.php页面的时候,让其自动重定向到b.php
<?php
    //这句话会向客户端发送一个302状态码,告诉浏览器重新访问b.php
    //header 可以向http响应头中写入信息
    header("Location:b.php");
?>
header("location:新页面");
细节:302状态码也可以让其跳转到外网去
404码:一般是该页面不存在;
304码:
HTTP/1.1 304 Not Modified
Date: Sun, 16 Dec 2012 15:52:56 GMT
Server: Apache/2.2.22 (Win32) PHP/5.3.5
Connection: Keep-Alive
Keep-Alive: timeout=5, max=99
ETag: "47000000010a1b-506d-4d0937ed76df1"
当客户端有缓冲时http响应状态码304
如何通过http响应控制页面缓存,默认会缓存;
<?php
    //通过header来禁用缓存(ajax)
    header("Expires:-1");
    header("Cache-Control: no_cache");
    header("Pragma: no-cache");
    echo "hello cache";
?>
http实际应用 文件下载:
<?php
    //演示下载一个图片;
    //中文名的话,需要转码
    //$file_name="sun.jpg";
    function down_file($file_name,$file_sub_dir){
    
        
        // 打开文件,转化为中文转码 gb2312
        $file_name=iconv("utf-8","gb2312",$file_name);
        $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
        if(!file_exists($file_path)){
        
            echo "文件不存在";
            return;
        
        }
        $fp=fopen($file_path,"r");
        //获取下载的文件大小
        $file_size=filesize($file_path);
        if($file_size>100){
        
            echo "<script language='javascript'>window.alert('文件太大') </script>";
            return;
        
        }
        //下载文件需要的http协议的头
        //返回的文件
        header("Content-type: application/octet-stream");
        //按照字节大小返回
        header("Accept-Ranges: bytes");
        //返回文件大小
        header("Accept-Length: $file_size");
        //这里对客户端的弹出对话框,对应的文件名
        header("Content-Disposition: attachment; filename=".$file_name);
        //向客户端回送数据
        $buffer=1024;
        $file_count=0;
        while(!feof($fp) && ($file_size-$file_count>0) ){
            
            $file_data=fread($fp,$buffer);
            //统计读了多少个字节
            $file_count+=$buffer;
            //把部分数据回送给浏览器
            echo $file_data;
        
        }
        //关闭文件
        fclose($fp);
    }
    //测试函数是否可用
    down_file("闫磊.jpg","/http/")
?>
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号