PHP中http协议详解
对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);
}
PHP中http协议详解的更多相关文章
- opencv中 int main(int argc,char* argv[])详解
opencv中 int main(int argc,char* argv[])详解 argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 ...
- 【转载】3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解
原文:3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解 3D中z值会影响屏幕坐标系到世界坐标系之间的转换,2D中Z值不会产生影响(而只 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- SVN组成中trunk,branches and tags功能用法详解
SVN组成中trunk,branches and tags功能用法详解 我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...
- UIViewController中各方法调用顺序及功能详解
UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- 详解Android中的四大组件之一:Activity详解
activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...
- 连接池中的maxIdle,MaxActive,maxWait等参数详解
转: 连接池中的maxIdle,MaxActive,maxWait等参数详解 2017年06月03日 15:16:22 阿祥小王子 阅读数:6481 版权声明:本文为博主原创文章,未经博主允许不得 ...
- SQL Server中通用数据库角色权限的处理详解
SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
随机推荐
- 数据库mysql原生代码基本操作
创建表: CREATE TABLE `biao` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '测试表', `createtime` ...
- Spring-Security-OAuth2微信网页授权
@Controller public class Controller1 { @Autowired private OAuth2ClientContext context; @Bean @Scope( ...
- jQuery自适应倒计时插件
jQuery自适应倒计时插件 在线演示本地下载
- Node.js的运行
nodejs的运行 首先要在你的电脑上下载node.js并安装,大家可以去官网下载 1.第一种方法:去官网下载git,安装好后,在桌面上单击鼠标右键,会有一个Git Bash Here,然后在新建一个 ...
- 个人作业——Alpha项目测试
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...
- 如何用putty链接服务器端,并安装wdcp
首先把自己阿里云的磁盘格式化然后重启 自己下载一个PuTTY 打开后输入自己的Ip地址端口号默认是22 会跳出一个yes 跟no界面,点击yes 会进入一个类似cmd界面 直接输入root,然后会提示 ...
- HTTP05--HTML常用知识
一.URL地址含义 需要搞清URL和URI的差别,以及QueryString的含义. 二.GET和POST的区别 详细介绍可参考文章:http://zengrong.net/post/1802.htm ...
- 查看/进入mac根目录的方式
1.通过“前往文件夹”快捷键组合 (1)打开finder,点击上部菜单栏“前往”,然后“个人”,直接跳转. (2)快捷键组合:command + shift + G:注意:打开finder后,再快捷键 ...
- CaffeMFC:caffe.pb.h(2525): error C2059: syntax error : 'constant'
下边的语句会报 syntax error : 'constant'. static const DimCheckMode STRICT = V1LayerParameter_DimCheckMode_ ...
- CDR真实图片转水墨画效果制作教程
CorelDRAW创造性滤镜组是最具有创造力的滤镜,使用里面的散开滤镜能够实现类似于水墨的表现手法,然后再结合图层的合并模式,让您的图片产生意想不到的视觉效果.本文将利用CorelDRAW软件中提供的 ...