php里http协议基础

HTTP协议

超文本传输协议(HyperText Transfer Protocol

1、http协议建立在 tcp/ip协议基础之上

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

3、http协议全称  超文本传输协议

**短连接http1.0 (发送后立马断开连接) 长连接http1.1(超时断开连接)

 httpwatch插件抓取http内容

图床技术(图片放在专门的服务器上)

实例

<h1>abc</h1>

<img src=”new.jpg”/>

<img src=”new1.jpg”/>

3http请求:文字,newnew1。(都是不同的,图片相同时是2次,暂时存储相同的)

http协议的--http请求(Request

基本结构:

请求行

消息头

消息体(实体内容)

举例:

GET /phpdemo/http/http1.php HTTP/1.1     

【表示发送的是get请求,请求资源是/phpdemo/http/http1.php】

Accept: text/html, application/xhtml+xml, */*  【表示客户端可以接受任何数据类型】

Referer: http://localhost/phpdemo/http/        【1、表示我是从哪里来的】

Accept-Language: zh-CN                   【页面接受什么语言】

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

【告诉服务器我的浏览器的内核,操作系统】

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

Host: localhost                           【主机,默认80

Connection: Keep-Alive                   【表示不要立即断掉请求】

现在我想知道,客户端究竟给服务器端发送了什么东西 

这个页面不想一个IP用户不能访问

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

重要的有:

[HTTP_HOST]

[REMOTE_ADDR]       访问该页面的IP地址

[DOCUMENT_ROOT]     可以获取apache主目录

[REQUEST_URI]         可以获取请求资源名

http请求有两种主要的方式:

get/post

getpost的区别有哪些

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

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

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

b) 浏览器在对getpost请求做限制,get请求数据2K+35  post请求没有限制

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

现在实际使用以下http,完成一个防盗链的练习

☞ http请求布什固定的,是根据实际情况的,REFERER

strpos($str,””);

接受的数据

1、基本结构

状态行

消息头信息

<--空行

实体信息

快速入门

HTTP/1.1 200 OK                    【200 OK表示客户端请求成功】

Date: Wed, 02 Jan 2013 07:50:06 GMT 【告诉浏览器 请求的页面时间】

Server: Apache/2.2.17 (Win32) PHP/5.3.3  【表示告诉浏览器 服务器的情况】

X-Powered-By: PHP/5.3.3

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

Keep-Alive: timeout=5, max=95

Connection: Keep-Alive

Content-Type: text/html;charset=utf-8       【文档类型】

Cache-control private                    【缓存】

u 对状态码的说明

举例说明http响应的实际运用

u 302状态码的使用:

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

基本用法使用

<?php

//会向客户端发送一个302 页面,要求浏览器重新访问b.php页面

//header可以向http里面写东西  header — Send a raw HTTP header

header("Location:新页面");

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

?>

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

u 404

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

u 304码的使用

<?php

echo "helloo";

echo "<img src='new.jpg'/>";

?>

上面说明了304的具体使用方法

HTTP/1.1 304 Not Modified

Date: Wed, 02 Jan 2013 08:38:14 GMT

Server: Apache/2.2.17 (Win32) PHP/5.3.3

Connection: Keep-Alive

Keep-Alive: timeout=5, max=99

ETag: "3c00000002b733-1871-4af521bd79b23"

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

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

<?php

//表示  3  秒后自动跳转到百度的页面

header("Refresh:3;url=http://ww.baidu.com");

?>

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

<?php

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

header("Expries:-1");

header("Cache-Control:no_cache");

header("Pragma:no_cache");

echo "hello cache";

?>

演示http实际应用 文件下载

中文时,文件名必须转码utf-8==>gb2312),才能下载

文件下载的原理:

<?php

//函数说明

//参数说明$file_name 文件名

//        $file_sub_dir 下载文件的子路径  ‘/xxxx/xxx/’

function down_file($file_name,$file_sub_dir){

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

//如果文件是中文的

//原因:php文件系统比较早,需要对中文转码 gb2312

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

//文件不在同级时路径(相对)

//$file_path="./down/".$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_path);

//向客户端回送数据

$buffer=1024;

//为了安全,我们最好做一个文件字节读取计数器

$file_count=0;

//这句话用于判断文件是否结束

while (!feof($fp) && ($file_size-$file_count)){

$file_data=fread($fp, $buffer);

//把部分数据会送给浏览器

echo $file_data;

}

//关闭文件

fclose($fp);

}

down_file("桌面.jpg""/phpdemo/http/down/")

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值