您的位置:首页 > 理论基础 > 计算机网络

HTTP协议:超文本传输协议

2012-12-20 01:21 489 查看
HTTP协议:超文本传输协议
建立在TCP/IP协议基础上的
我们的WEB开发数据的传输都是依赖于HTTP协议
http协议的 http请求(request)

基本结构
请求行
消息头
消息体(实体内容)
GET /http/http1.php HTTP/1.1
//表示发送的GET请求,请求资源是/http/http1.php
Accept: */*
//表示客户端可以接受任何数据
Accept-Language: zh-CN
//表示支持页面语言
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
//告诉服务器我的浏览器的内核,操作系统
Accept-Encoding: gzip, deflate
//表示接受什么样的数据压缩格式
Host: localhost
//主机:80
Connection: Keep-Alive
//表示不要立即断掉我们的请求

客户端给服务器发送的东西:
$_SERVER全局数组
在服务器端,我们可以通过$_server来获取我们需要的信息
REMOTE_ADDR=127.0.0.1 //访问该页面的IP
DOCUMENT_ROOT=C:/myphp/apache/htdocs 可以获取apache 的主目录
REQUEST_URI=/http/http1.php 可以获取 请求的资源名

HTTP请求方式 POST,GET(常用)
get/post区别:
1,安全性 get请求的数据会显示在地址栏,post请求数据,放在http的消息体中
2,从可以提交数据的大小看,
2.1,http协议本身并没有对数据大小进行限制
2.2,浏览器在对get和post进行限制,大数据量用post请求
3,get请求可以更好的添加到收藏夹

如何防盗链:
Referer: http://localhost/http/http1.php strpos(字符串,字母)//字母在字符串首次出现的位置
if(strpos($_SERVER['Referer']," http://localhost/http")==0){ echo "可以访问";
}else{
echo"不可访问";
}
HTTP响应:
HTTP/1.1 200 OK //200OK表示请求成功
Date: Sun, 16 Dec 2012 14:58:39 GMT //告诉浏览器 请求页面的时间
Server: Apache/2.2.22 (Win32) PHP/5.3.5 //表示告诉浏览器 服务器的情况
X-Powered-By: PHP/5.3.5
Content-Length: 18 //表示回送的数据有18个字节
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Last-Modified:Tue,11 Jul 2000 18:23:51 GMT//表示浏览器请求的页面更新时间
Content-Type: text/html //文档类型

<img src="12.jpg">
http的状态码说明



例子:302状态码的使用
比如访问a.php页面的时候,让其自动重定向到b.php
<?php
//这句话会向客户端发送一个302状态码,告诉浏览器重新访问b.php
//header 可以向http响应头中写入信息
header("Location:b.php");
?>
header("location:新页面");
细节:302状态码也可以让其跳转到外网去
404码:一般是该页面不存在;
304码:
HTTP/1.1 304 Not Modified
Date: Sun, 16 Dec 2012 15:52:56 GMT
Server: Apache/2.2.22 (Win32) PHP/5.3.5
Connection: Keep-Alive
Keep-Alive: timeout=5, max=99
ETag: "47000000010a1b-506d-4d0937ed76df1"
当客户端有缓冲时http响应状态码304
如何通过http响应控制页面缓存,默认会缓存;
<?php
//通过header来禁用缓存(ajax)
header("Expires:-1");
header("Cache-Control: no_cache");
header("Pragma: no-cache");
echo "hello cache";
?>
http实际应用 文件下载:
<?php

//演示下载一个图片;
//中文名的话,需要转码

//$file_name="sun.jpg";
function down_file($file_name,$file_sub_dir){

// 打开文件,转化为中文转码 gb2312
$file_name=iconv("utf-8","gb2312",$file_name);
$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
if(!file_exists($file_path)){

echo "文件不存在";
return;

}
$fp=fopen($file_path,"r");
//获取下载的文件大小
$file_size=filesize($file_path);
if($file_size>100){

echo "<script language='javascript'>window.alert('文件太大') </script>";
return;

}
//下载文件需要的http协议的头
//返回的文件
header("Content-type: application/octet-stream");
//按照字节大小返回
header("Accept-Ranges: bytes");
//返回文件大小
header("Accept-Length: $file_size");
//这里对客户端的弹出对话框,对应的文件名
header("Content-Disposition: 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);
}
//测试函数是否可用
down_file("闫磊.jpg","/http/")
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: