对PHP文件来说

Php能够有  html   css javascript php脚本 flash它的不同部分是在不同的地方运行的(server和client)

http协议

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

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

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

http协议的  http请求

基本结构:

请求行

消息头

消息体(实体内容)

Accept  text/html,application/xhtml+xml,application/xml;

q=0.9,*/*;q=0.8

Accept-Encoding  gzip, deflate

Accept-Language  zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Cache-Control  max-age=0

Connection  keep-alive

Host  localhost

User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0

GET /http2.php HTTP/1.1

Host: localhost

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Referer: http://localhost/test.php

Connection: keep-alive

说明:

GET override.php表示用get方式请求资源

Accept 表示client能够接收不论什么数据

Accept-Language 页面语言

Accept-Encoding 表示接收什么样的数据压缩格式

Host  主机

User-Agent 告诉我们server内核,操作系统

Connection 表示链接方式 不要马上断掉我们的请求

Referrer  表示我是从哪里来 防盗链

假设我这个http2.php , 不希望192.168.0.3的訪问

在server端。我们能够通过一个$_SERVER 来获取我们须要的信息

重要的有:

HTTP_HOST=localhost

REMOTE_ADDR=127.0.0.1 訪问该页面的IP

DOCUMENT_ROOT=G:/zhentuan  能够获取apache的主文件夹

REQUEST_URI=/http2.php 能够获取请求的资源名

http请求有两种基本的方式:

get/post 差别与联系

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

2. 从能够提交的数据的大小来看:

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

浏览器在对get和post请求做显示。 get请求数据2k+35 post请求没有限制

3. Get请求能够更好的加入到收藏夹

如今我们实际使用一些http请求,完毕一个防盗链的练习

if(isset($_SERVER['HTTP_REFERER'])){

//取出来

//推断$_SERVER['HTTP_REFERER'] 是不是以http://localhost开头的

if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/...")==0){

echo "你能够查看信息";

}else

{

//跳转到警告页面

header("Loaction:warning.php");

}

}else

{

//跳转到警告页面

header("Location:warning.php");

}

http协议的  http响应

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

HTTP/1.1 200 OK                    200 OK表示client请求成功

Server:Microsoft-IIs/5.0           表示告诉浏览器 server情况

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

Content-Length 2291                表示回来的数据有2291字节

Content-Type:text/html             文档类型

Cache-control:private              缓存

对状态码的说明

举例说明http响应在实际应用

u 302状态码的使用

比方我们如今希望,当訪问a.php页面。让其自己主动重定向到b页面

基本使用方法:

<?

php

//这句话会向client发送一个302的状态码,告诉浏览器又一次訪问b.php

//header能够向http头写入信息header — Send a raw HTTP header

header("Location:b.php");

?>

细节:302状态码也能够让其跳转到外网我去

u 404状态码的使用

一般就是该页面不存在

u 304状态码的使用

演示怎样通过http响应,控制浏览器间隔一定时间去跳转

<?php

Header(“Refresh:3;url=http://www.sohu.com”);

?

>

演示怎样通过http响应控制页面缓存。默认情况下浏览器会缓存页面

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

header("Expires:-1");

header("Cache-control:no-cache");

header("Pragma:no-cache");

echo "hellow cache";

http文件下载

文件下载的原理

//对函数的说明

//1.參数说明$file_name文件名称

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

function down_file($file_name,$file_sub_dir){

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

//假设文件是中文,必须对文件名称进行转码

//原因,php文件函数,比較古老,须要对中文转码GB2312

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

//1.使用相对路径

$file_path=$file_sub_dir.$file_name;

//2.使用绝对路径

//$file_path=$_SERVER['DOCUMENT_ROOT']."/down/".$file_name;

//打开文件

if(!file_exists($file_path))

{

echo "文件不存在";

return;

}

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

//猎取下载文件大小

$file_size=filesize($file_path);

//返回的文件

header("Content-type:application/octet-stream");

//依照字节大小返回

header("Accept-Ranges:bytes");

//返回文件大小

header("Accept-Length:$file_size");

//这里client的弹出圣诞框,相应的文件名称

header("Content-Disposition:attachment;filename=".$file_name);

//向client回送数据

$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);

}

P​H​P​中​h​t​t​p​协​议​详​解的更多相关文章

  1. opencv中 int main(int argc,char* argv[])详解

    opencv中  int main(int argc,char* argv[])详解 argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     ...

  2. 【转载】3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解

    原文:3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解 3D中z值会影响屏幕坐标系到世界坐标系之间的转换,2D中Z值不会产生影响(而只 ...

  3. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  4. SVN组成中trunk,branches and tags功能用法详解

    SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...

  5. UIViewController中各方法调用顺序及功能详解

    UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...

  6. 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...

  7. 详解Android中的四大组件之一:Activity详解

    activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...

  8. 连接池中的maxIdle,MaxActive,maxWait等参数详解

    转: 连接池中的maxIdle,MaxActive,maxWait等参数详解 2017年06月03日 15:16:22 阿祥小王子 阅读数:6481   版权声明:本文为博主原创文章,未经博主允许不得 ...

  9. SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...

随机推荐

  1. 网络简要<入门篇>

    OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...

  2. Java中static方法

    今天学习到了并且应用到了java中的静态方法,并且了解到它的好处与缺点. ● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装 ...

  3. eclipse 安装svn插件记录

    每个人都有自己喜欢的和习惯的一套开发环境,其中对于喜欢用eclipse的同学来说.subclipse插件可以说是必不可少的插件了. 他的安装有两种方法,一种是在线安装.然而这种安装实在是太慢了,无法忍 ...

  4. P2871 [USACO07DEC]手链Charm Bracelet

    题目描述 Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like t ...

  5. PAT甲级1016Phone Bills

    #include<iostream> #include<cstdio> #include<cstdlib> #include<vector> #incl ...

  6. cms判断写法

    cms比较容易写出循环的网页内容,对于有些循环的网页内容有不同css设定,这样在写cms时需要对循环做出条件判断:{if 判断条件}输出内容{else}输出内容{/if}.通过判断可以实现图片轮播效果 ...

  7. IE bug集锦

    ie8 iframe 不显示 问题描述: IE8的非兼容模式下(兼容模式是ie7,不存在),iframe会不显示: 可以通过Ctrl+A全选或者是调整窗口大小显示出来. 解决办法: 这是由于要显示的i ...

  8. linux下vim命令汇总

    一. 进入vi的命令 vi filename : 打开或新建文件,并将光标置于第一行首 vi +n filename : 打开文件,并将光标置于第n行首 vi + filename : 打开文件,并将 ...

  9. Java中Math对象的属性与方法

    Math.sqrt() ——————>计算平方根Math.cbrt()————————>计算立方根Math.pow(a, b)——————————>计算a的b次方Math.max( ...

  10. 【转】关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念

    关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念 笔者是个刚刚踏入压力测试领域不到2个月的小菜,这里分享一下线程组中3个参数之间关系的个人见解,不喜请!喷!,望大家 ...