http协议深度剖析
来源:互联网 发布:vba range.offset 数组 编辑:程序博客网 时间:2024/05/16 11:03
http协议深度剖析①-http请求详解防盗链技
http协议
1. http协议是建立在 tcp/ip协议基础上.
2. 我们的web开发数据的传输都是依赖于http协议.
3. http协议全称是超文本传输协议
http协议的-http请求(request)
基本结构
请求行
消息头
<----空行
消息体(实体内容)
举例:
GET/test/hello.html HTTP/1.1
【表示发送的get请求,请求资源是/test/hello.html】
Accept:*/* 【表示客户端可以接受任何数据】
Referer: http://localhost:80/test/abc.html【1.表示我是从哪里来】
Accept-Language:zh-cn 【页面语言】
User-Agent:Mozilla/4.0 【告诉服务我的浏览器的内核,操作系统】
Accept-Encoding:gzip, deflate 【表示接受什么样的数据压缩格式.】
Host:localhost:80 【主机:80】
Connection:Keep-Alive 【表示不要立即断掉我们的请求.】
现在我们想知道,客户端究竟给服务器发送的内容
如果我这个http1.php. 不希望192.168.1.33 这个用户访问.
在服务器端,我们可以通过$_SERVER来获取我们需要的信息
重要的有:
HTTP_HOST
REMOTE_ADDR访问该页面的ip
DOCUMENT_ROOT 可以获取 apche的主目录
REQUEST_URI可以获取请求的资源名
http请求有两种主要的方式
get /post
get 和post的区别有哪些
1. 安全性 get请求的数据会显示在地址栏上, post请求的数据,放在http协议的消息体
2. 从可以提交数据的大小看.
2.1 http协议本身并没有限制数据大小.
2.2 浏览器在对get和post请求做显示, get请求数据2k+35 ,post没有显示.
3. get请求可以更好的添加到收藏夹.
现在我们实际使用一些http请求,完成一个防盗链的练习.
☞ http请求不是固定,是根据实际情况的,比如REFEER.
http协议深度剖析②-http响应详解(302 304码运用)
更新时间:2013年02月21日13时26分来源:
Http响应(response)
简单定义: 一个Http响应代表服务器给浏览器回送的数据,同时告诉浏览器应当怎样处理数据.
1. 基本结构
状态行
消息头信息
<--空行
实体信息
快速入门
HTTP/1.1200 OK 【200 ok表示客户端请求成功】
Server:Microsoft-IIS/5.0 【表示告诉浏览器服务器的情况】
Date:Thu, 13 Jul 2000 05:46:53 GMT 【告诉浏览器请求的页面的时间】
Content-Length:2291 【表示回送的数据有 2291个字节】
Content-Type:text/html 【文档类型】
Cache-control:private 【缓存】
hello
对状态码的说明
状态码
含义
100~199
表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299
表示成功接收请求并以完成整个处理过程,常用200
300~399
为完成请求,客户端进一步细化请求,例如,请求的资源已经移动到一个新的地址,常用302、304
400~499
客户端请求有错误,常用404
500~599
服务器端出现错误常用500
1 分钟前上传
下载附件(42.31 KB)
举例说明Http响应的实际应用
302状态码的使用
比如我们现在希望访问a.php 页面,让其自动重定向到b.php
基本用法使用
<?php
//header(“Location: 新的页面”);
header(“Location: http://www.sohu.com”);
exit();
?>
细节: 302 状态码也可以让其跳转到外网去
404 码
404 最常见的状态码
404一般说就是该页面不存在
304码使用
304 码主要是告诉浏览器,请求的资源不需要更新
<?php
echo “hello”;
echo “<img src=”Sunset.jpg” width=”100px”>“
?>
上面说明了 304的具体用法
HTTP/1.1304 Not Modified
Date:Tue, 13 Sep 2011 02:10:38 GMT
Server:Apache/2.2.17 (Win32) PHP/5.3.5
Connection:Keep-Alive
Keep-Alive:timeout=5, max=99
ETag:"12d00000000572c-6f69-3e1d849f35000"
http协议深度剖析③-http响应详解(禁用缓存设置)
更新时间:2013年02月24日12时07分来源:
下面是比较详细的一个Http响应
Location: http://www.baidu.org/index.php
Server:apache
Content-Encoding: gzip 【内容编码支持gzip压缩算法】
Content-Length: 80 【返回数据大小】
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【表示浏览器请求资源,最新时间】
Refresh: 1;url=http://www.baidu.com 【告诉浏览器,间隔1秒,重定向到 baidu】
Content-Disposition: attachment; filename=aaa.zip
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search 【讲Cookie】
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
演示如何通过Http响应,控制浏览器间隔一定时间去跳转.
<?php
//header(“Refresh: 3 ; url=http://www.sohu.com”);
header(“Refresh: 3 ; url=http://localhost/http/d.php”);
?>
演示如何通过Http响应控制页面缓存,在默认情况下,浏览器会缓存页面.
<?php
//通过header来禁用缓存(ajax )
header("Expires: -1");
header("Cache-Control:no_cache");
header("Pragma: no-cache");
echo "hello!cache";
?>
http协议深度剖析④-http响应详解(文件下载)
更新时间:2013年02月26日15时35分来源:
演示Http实际应用的文件下载
文件下载的原理.
1 分钟前上传
下载附件(47.46 KB)
代码如下:
<?php
//对函数的说明
//参数说明 $file_name文件名
// $file_sub_dir: 下载文件的子路径 '"/xxx/xxx/"
function down_file($file_name,$file_sub_dir){
//死去活来,演示下载一个图片.
//如果文件是中文.
//原因 php文件函数,比较古老,需要对中文转码gb2312
$file_name=iconv("utf-8","gb2312",$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_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/down/");
?>
上机的小练习:
- http协议深度剖析
- HTTP协议深度剖析
- Java中深度剖析Http协议
- 细说servlet之 深度剖析http协议
- 细说servlet之 深度剖析http协议
- PHP自学之路--- HTTP协议深度剖析
- 06-http协议深度剖析2--302-304
- 高并发系统之HTTP缓存协议深度剖析
- 简单剖析HTTP协议
- 剖析 HTTP 协议
- HTTP协议深度详解
- 深入剖析/图解HTTP 协议
- 01-http消息头剖析-http协议
- 【协议】深度了解HTTP/2
- Servlet自学第14讲:深度剖析http请求
- [协议]ICMP协议剖析
- [协议]ICMP协议剖析
- 空指针深度剖析
- HDU1715 大斐波数
- 学习Google例子 ApiDemo
- svn常见问题及原因
- 在cmd下用mysql客户机连接mysql服务器
- 利用backtrace诊断 Segment Fault 崩溃原因
- http协议深度剖析
- C++string类常用函数
- 守护进程的学习
- 基于状态机的新型按键消抖扫描程序
- string 与char* char[]之间的转换
- sqlt之一 安装篇
- APIDemo - ApiDemos.java - 关于Intent (1)
- 数据库连接池C3P0学习
- struts2的表单验证 ,消息处理学习笔记