Http

php模块-- 设置--apache/config/loadModule
# 注释
dll 是 C写的
脚本语言:只是完成部分功能,不能独立使用---可与.net比较
web服务器:完成url的接收和会发
应用服务器:完成代码的实际执行

浏览器-->服务器
步骤:尝试连接 --http请求--解析主机--解析资源--http回发

所有数据传输的底层都是tcp/ip 协议

http1.0 短连接(已弃用) http1.1 长连接

http 资源分次请求,在逻辑上为资源分数据库存储提供了可能,例如图床的实现。//有利于提高访问速度(淘宝图片分服务器)

http中的图片乱码--图片内容
httpwatch右上角export用于到处http内容

同一个资源,浏览器只取一次。

http请求结构(request)
1.请求行  第一行
2.消息头
3.消息体(实体内容)

消息头(http标头)详解
Accept:可接收的数据类型 */*(表示接受所有数据类型)
Accept-Language:zh-cn    //页面语言
User-Agent:Mozailla/4.0 //浏览器内核,操作系统
Accept-Encoding:gzip.deflate  //可接受数据压缩类型
Host:localhost:80  //主机
if-Modified-Since:Tue,11 Jul 2000... // 页面上次修改的时间,如果无修改,页面不会重新请求
Referer:http://...     //从什么地方跳转而来
Connection:Keep-Alive; //  长连接

php将收到的http请求进行二次封装,封装后成为$_SERVER(数组)
重要的索引字段;
HTTP_HOST //获取主机名
PATH:
REMOTE_ADDR//访问者的ip地址
DOCUMENT_ROOT //apache的安装路径
REQUEST_URI  //获取资源请求的url


题外话:cmd 命令:ipconfig

防盗链技术--REFERER

print_r($_SERVER);
if(isset($_SERVER['HTTP_ERFERER'])){
$str =$_SERVER['HTTP_ERFERER'];
   if(strpos($str,'localhost://')==0)
{
echo"可以查看";
}
header("Location: warning.php");
}else
{
header("Location: warning.php");
}

http请求的种类: GET POST DELETE PUT等
GET和POST的区别
1.POST更安全,GET将请求的参数放入url,而POST将参数写在http消息体中
2.POST的信息长度没有限制,而GET会受到浏览器限制。
3.GET利于页面收藏,
4.GET的访问速度较快。
http响应(response)
HTTP/1.1 200 OK
Server:Microsoft-IIS/5.0
Date:Thu,13 Jul 2000... //请求页面的时间
Content-Encoding:gzip   //内容支持gzip压缩算法
Content-Length:2291   //回送的文件大小
Content-Type:text/html  //文档类型
Cache-control:private   //工具--internet选项--常规--浏览历史记录--设置--查看文件
Last-Modified:Tue,11...    //请求资源的最新更新时间
Refresh: 1;url=http://...   //定时跳转
Content-Dispositin:attachment,filename=aa.zip  //下两个与文件下载
相关
Transfer-Encoding :chunked  
Set-Cookie:
Expire :-1     //以下三个与浏览器缓存控制有关        
Cache-control :no_cache
Pragma :no_cache
Location:b.php

状态码说明
200--成功;302--资源转移到其他位置(页面跳转,重定向);304--缓存请求(Not Modified)
404--客户端的请求有错误;500--服务器端有错误;Cache--从缓存中读取

header("Location: b.php"); //客户端跳转,而非发生在服务器端。

header("Refresh:3;url=http://...");  //3秒后跳转

header("Expires:-1");//控制浏览器缓存(禁用缓存)
header("Cache-control :no_cache");
header("Pragma:no_cache");

//文件下载   //编程中注意封装成方法类
文件过大:分批返回文件
$file_name="文件.jpg";
$file_name =iconv("utf-8","gb2312",$file_name);
$file_path=$_SERVER['DOCUMENT_ROOT']."/down/".$file_name;
//绝对路径查找会比相对路径查找要快
if(!file_exists($file_name))
{
echo"";
return;
}
$fp=fopen($file_name,"r");  //fp实质是指针

$file_size =filesize($file_name);  //参数为文件名
//返回文件类型而不是文本类型
header("Content-type:application/octet-stream");
//按照字节返回大小
header("Accept-Ranges:bytes");
//接受的文件大小
header("Accept-Length:$file_size");
//客户端弹出的对话框中对应的文件名
header("Content-Dispositin: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);
Received:接受的http的大小


文件类型:文本文件 xx.txt
          二进制文件:图片,音频,视频

题外话:url回车进入网站,会先从缓存中读取。url 刷新,更新读取。

posted @ 2014-03-02 21:19  曹桦伟  阅读(225)  评论(0编辑  收藏  举报