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中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
随机推荐
- 能力 or say 职业 规划
2019.5.8 黑盒测试,白盒测试,接口测试,自动化测试,性能测试.. 往测试工程师发展,再是测试开发,高级测试开发.. 要是真的喜欢前端,可以再转吧.前端后端应该要清楚它们的区别 前端:广度, ...
- $P1596 [USACO10OCT]湖计数Lake Counting$
\(problem\) 其实这题吧\(DFS\)好写一点(大雾 所以就不讲\(DFS\)了 em \(BFS\)的话 主要是 判重. 方向. 队列.(没了吧 至于位置 用两个队列?还是\(pair\) ...
- Linux添加用户组和删除用户组
1.添加用户组使用groupadd命令添加用户组:groupadd group_name此操作需由系统管理员进行.2.删除用户组使用groupdel命令删除用户组:groupdel group_nam ...
- Java——Spring注解
Spring常用注解使用注解来构造IoC容器用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan bas ...
- SQL基本操作——HAVING
HAVING:在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 我们拥有下面这个 "Orders" 表: O_Id OrderDate Or ...
- 离线安装Selenium
https://blog.csdn.net/poem_ruru/article/details/79032140
- 2016.01.05 DOM笔记(一) 查找元素
DOM节点的种类 元素和标签是一个意思,例如<body>标签或者称为<body>元素 节点DOM的节点分为三类 元素节点,文本节点,属性节点 例如 <div id=‘b ...
- C# SetWindowsHookEx
[DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, keyboardHookPr ...
- 利用 CSS animation 和 CSS sprite 制作动画
CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...
- 数组的复制 --System.arraycopy()
import java.util.Arrays; public class HellowWorld { public static void main(String[] argv ) { int[] ...