首页 » 网站推广 » php断定协定技巧_http协议详解

php断定协定技巧_http协议详解

访客 2024-12-03 0

扫一扫用手机浏览

文章目录 [+]

超文本传送协议(HTTP)是一种通信协议, 它许可将超文本标记措辞(HTML)文档从Web做事器传送到Web浏览器。

1.http协议是建立在tcp/ip协议根本上;

php断定协定技巧_http协议详解 php断定协定技巧_http协议详解 网站推广

2.我们的web开拓数据的传输都是依赖于http协议;

php断定协定技巧_http协议详解 php断定协定技巧_http协议详解 网站推广
(图片来自网络侵删)

3.http协议全称是 超文本传输协议;

URL(统一资源定位符)

Uniform Resource Locator

统一资源定位符

http://www.xxxxxx.com:80/index.php

协议:http(信鸽)

主机:www.xxxxxx.com

端口号:80 所有浏览器默认要求都是80端口

资源:/index.php

HttpWatch软件(强大的网页数据剖析工具)

Stream(流)

左边:客户端向做事器端发送数据流

右边:做事器端向客户端返回数据流

http协议的-http要求(request)细节(客户端向做事器端发送数据流)

客户端连上做事器后,向做事器要求某个web资源,称之为客户端向做事器发送了一个HTTP要求。

一个完全的HTTP要求包括如下内容:一个要求行、多少头、以及实体内容,个中的一些头和实体内容都是可选的,

头和实体内容之间要用空行隔开。
如下所示:

基本构造

要求行

<----空行

体(实体内容)

举例:

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 当前要求头中Host

REMOTE_ADDR 访问该页面的ip

DOCUMENT_ROOT 可以获取 apche的主目录

REQUEST_URI 可以获取 要求的资源名

http要求有两种紧张的办法

get / post

GET提交,要求的数据会跟在URL之后例如:login.php?name=abc&password=kkk

POST提交:把提交的数据放置在是HTTP包的包体中。
比如:

POST /test/reg.php HTTP/1.1

Host:

Content-Type:

Content-Length:

<--空行

name=abc&password=xyz

get和post的差异有哪些

1. GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

2. 安全性:get要求的数据会显示在地址栏上, post要求的数据,放在http协议的体,post安全性高

3. 从可以提交数据的大鄙视:http协议本身并没有限定数据大小。
GET:特定浏览器和做事器对URL长度有限定,

例如IE对URL长度的限定是2083字节(2K+35)。
对付其他浏览器,如Netscape、FireFox等,理论上没有长度限定,其限定取决于操作系统的支持。

因此对付get提交时,传输数据就会受到URL长度的限定。
post:由于不是通过URL传值,理论上数据不受限。

4. get要求可以更好的添加到收藏夹;

用于HTTP要求中的常用头

Accept: text/html,image/

Accept-Charset: ISO-8859-1

Accept-Encoding: gzip,compress

Accept-Language: en-us,zh-cn

Host: www.sohu.com:80

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT

Referer: http://www.sohu.com/index.php

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Cookie

Connection: close/Keep-Alive

Date: Tue, 11 Jul 2003 18:23:51 GMT

当做事器须要知道要求是来自哪个ip等信息,就可通过程序得到相应的信息。

防止盗链的关键程序:

'HTTP_REFERER' 勾引用户代理到当前页的前一页的地址(如果存在)。

由 user agent 设置决定。
并不是所有的用户代理都会设置该项,有的还供应了修正 HTTP_REFERER 的功能。
简言之,该值并不可信。

<?phpif(isset($_SERVER['HTTP_REFERER'])){ //判断是否是空值//取出来//判断$_SERVER['HTTP_REFERER']是不因此本网站网址开头的if(strpos($_SERVER['HTTP_REFERER'],"网站域名")==0){echo "你没有盗链";//语句....}else//跳转到警告页面header("Location:warning.php");}else{header("Location:warning.php");}?>

http相应(response)做事器端向客户端返回数据流(以下的内容都是基于做事器端向客户端发送的信息)

大略定义: 一个Http相应代表做事器给浏览器回送的数据,同时见告浏览器应该若何处理数据;(表示做事器相应客户端浏览器的信息)

1. 基本构造

状态行

头信息

<--空行

实体信息

快速入门

HTTP/1.1 200 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 实体细节

HTTP相应的细节--状态行

格式:HTTP版本号 状态码 缘故原由阐述<CRLF>

单例:HTTP/1.1 200 OK

状态码用于表示做事器对要求的处理结果,它是一个三位的十进制数,相应状态码分为5类

状态码 含义

100~199 表示成功吸收要求,哀求客户端连续提交下一次要求才能完玉成部处理过程

200~299 表示成功吸收要求并已完玉成部处理过程,常用200

300~399 为完成要求,客户需进一步细化要求。
例如,要求的资源已经移动一个新地址,常用302、304

400~499 客户真个要求有缺点,常用404

500~599 做事器端涌现缺点,常用 500

举例解释Http相应的实际运用:

302状态码利用:

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

基本用法利用

<?php/header("Location: 新的页面");这句话会向客户端发送一个302状态码;(发送的是两个要求状态码,首先发送302状态码,见告浏览看重新访问新的页面,然后做事器再发送200状态码)/header("Location: http://www.sohu.com");exit();?>

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

404状态码利用:

404 最常见的状态码 404一样平常说便是该页面不存在

304状态码利用:

304 码紧张是见告浏览器,要求的资源不须要更新(理解:由于文件已经缓存了,就不须要更新)

<?phpecho "hello";echo "<img src="Sunset.jpg" width="100px">"?>

以上代码访问了一次,再重新打开时,则做事器向客户端浏览器发送304状态码,见告浏览器,要求的图片不须要更新

上面解释了304的详细用法

HTTP/1.1 304 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相应

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";?>

//下载文件须要的头

header("Content-type: application/octet-stream"); //见告浏览器返回的是文件(即输出MIME类型)

header("Accept-Ranges: bytes"); //见告浏览器按照字节大小返回,可以不要此行语句,最好保留

header("Accept-Length: $file_size"); //文件大小

header("Content-Disposition: attachment; filename=".$file_name); //这里是客户端弹出的对话框,对应的文件名

演示Http实际运用的 文件下载

代码如下:

<?php //函数的利用解释 //参数解释 $filename 文件名称 // $file_sub_dir: 下载文件的子路径 "/xxx/xxx/" function down_file($filename,$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>50){ 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("zhangsan.jpg","/data/download/"); //第二个参数必须是根路径?>

标签:

相关文章

住宅设计网站,打造理想家园的智慧助手

随着科技的飞速发展,互联网已经渗透到我们生活的方方面面。在住宅设计领域,住宅设计网站应运而生,成为越来越多家庭打造理想家园的智慧助...

网站推广 2024-12-05 阅读0 评论0