http协议深度剖析

来源:互联网 发布:vba range.offset 数组 编辑:程序博客网 时间:2024/05/16 11:03

http协议深度剖析①-http请求详解防盗链技

http协议

1.     http协议是建立在  tcp/ip协议基础上.

2.     我们的web开发数据的传输都是依赖于http协议.

3.     http协议全称是超文本传输协议

http协议的-http请求(request)

基本结构

请求行

消息头

                          <----空行

消息体(实体内容)

举例:

GET/test/hello.html HTTP/1.1   

【表示发送的get请求,请求资源是/test/hello.html

Accept:*/* 【表示客户端可以接受任何数据】

Referer: http://localhost:80/test/abc.html1.表示我是从哪里来】

Accept-Language:zh-cn 【页面语言】

User-Agent:Mozilla/4.0  【告诉服务我的浏览器的内核,操作系统】

Accept-Encoding:gzip, deflate 【表示接受什么样的数据压缩格式.

Host:localhost:80 【主机:80

Connection:Keep-Alive     【表示不要立即断掉我们的请求.

现在我们想知道,客户端究竟给服务器发送的内容

如果我这个http1.php. 不希望192.168.1.33 这个用户访问.

在服务器端,我们可以通过$_SERVER来获取我们需要的信息

重要的有:

HTTP_HOST

REMOTE_ADDR访问该页面的ip

DOCUMENT_ROOT  可以获取 apche的主目录

REQUEST_URI可以获取请求的资源名

http请求有两种主要的方式

get /post

get post的区别有哪些

1.     安全性 get请求的数据会显示在地址栏上, post请求的数据,放在http协议的消息体

2.     从可以提交数据的大小看.

2.1  http协议本身并没有限制数据大小.

2.2  浏览器在对getpost请求做显示, get请求数据2k+35  ,post没有显示.

3.     get请求可以更好的添加到收藏夹.

现在我们实际使用一些http请求,完成一个防盗链的练习.

http请求不是固定,是根据实际情况的,比如REFEER.

http协议深度剖析②-http响应详解(302 304码运用)

更新时间:201302211326来源:

     Http响应(response

简单定义: 一个Http响应代表服务器给浏览器回送的数据,同时告诉浏览器应当怎样处理数据.

1.     基本结构

状态行

消息头信息

                    <--空行

实体信息

快速入门

HTTP/1.1200 OK            200 ok表示客户端请求成功】

Server:Microsoft-IIS/5.0            【表示告诉浏览器服务器的情况

Date:Thu, 13 Jul 2000 05:46:53 GMT 【告诉浏览器请求的页面的时间

Content-Length:2291                   【表示回送的数据有 2291个字节】

Content-Type:text/html         【文档类型】

Cache-control:private           【缓存】

hello

     对状态码的说明

 

状态码

含义

100~199

表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200~299

表示成功接收请求并以完成整个处理过程,常用200

300~399

为完成请求,客户端进一步细化请求,例如,请求的资源已经移动到一个新的地址,常用302304

400~499

客户端请求有错误,常用404

500~599

服务器端出现错误常用500

分钟前上传

下载附件(42.31 KB)

举例说明Http响应的实际应用

302状态码的使用

比如我们现在希望访问a.php 页面,让其自动重定向到b.php

基本用法使用

<?php

      //header(“Location: 新的页面”);

      header(“Location: http://www.sohu.com”);

      exit();

     

?>

细节: 302 状态码也可以让其跳转到外网去

     404

404 最常见的状态码

404一般说就是该页面不存在

     304码使用

304 码主要是告诉浏览器,请求的资源不需要更新

<?php

     

      echo “hello”;

   echo “<img src=”Sunset.jpg”  width=”100px”>“

?>

上面说明了 304的具体用法

HTTP/1.1304 Not Modified

Date:Tue, 13 Sep 2011 02:10:38 GMT

Server:Apache/2.2.17 (Win32) PHP/5.3.5

Connection:Keep-Alive

Keep-Alive:timeout=5, max=99

ETag:"12d00000000572c-6f69-3e1d849f35000"

http协议深度剖析③-http响应详解(禁用缓存设置)

更新时间:201302241207来源:

 下面是比较详细的一个Http响应

Location: http://www.baidu.org/index.php

Server:apache

Content-Encoding: gzip   【内容编码支持gzip压缩算法】

Content-Length: 80      【返回数据大小】

Content-Language: zh-cn

Content-Type: text/html; charset=GB2312

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【表示浏览器请求资源,最新时间】

Refresh: 1;url=http://www.baidu.com  【告诉浏览器,间隔1秒,重定向到 baidu

Content-Disposition: attachment; filename=aaa.zip

Transfer-Encoding: chunked  

Set-Cookie:SS=Q0=5Lb_nQ; path=/search  【讲Cookie

Expires: -1

Cache-Control: no-cache  

Pragma: no-cache   

Connection: close/Keep-Alive   

Date: Tue, 11 Jul 2000 18:23:51 GMT

演示如何通过Http响应,控制浏览器间隔一定时间去跳转.

<?php

       //header(Refresh: 3 ; url=http://www.sohu.com);

       header(Refresh: 3 ; url=http://localhost/http/d.php);

?>

演示如何通过Http响应控制页面缓存,在默认情况下,浏览器会缓存页面.

<?php

       //通过header来禁用缓存(ajax )

       header("Expires: -1");

       header("Cache-Control:no_cache");

       header("Pragma: no-cache");

       echo "hello!cache";


?>

http协议深度剖析④-http响应详解(文件下载)

更新时间:201302261535来源:

演示Http实际应用的文件下载

文件下载的原理.

分钟前上传

下载附件(47.46 KB)

代码如下:

<?php

      //对函数的说明

      //参数说明 $file_name文件名

      //              $file_sub_dir: 下载文件的子路径 '"/xxx/xxx/"

      function down_file($file_name,$file_sub_dir){

             //死去活来,演示下载一个图片.

             //如果文件是中文.

      

             

             //原因 php文件函数,比较古老,需要对中文转码gb2312

            $file_name=iconv("utf-8","gb2312",$file_name);

             //绝对路径

            $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;

             //如果你希望绝对路径

             

             //1.打开文件

            if(!file_exists($file_path)){

                   echo "文件不存在!";

                   return ;

             }

            $fp=fopen($file_path,"r");

             

             //获取下载文件的大小

             $file_size=filesize($file_path);

             if($file_size>30){

                   

                   echo "<script language='javascript'>window.alert('过大')</script>";

                   return ;

             }

             //返回的文件

            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/down/");

?>

上机的小练习:

 

0 0
原创粉丝点击