牛骨文教育服务平台(让学习变的简单)

HTTP协议深度剖析

一、HTTP协议

超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。是目前互联网上应用最为广泛的网络协议,是工作在tcp/ip协议基础上的,所有的www文件都必须遵循这个标准,设计HTTP的目的就是为了提供一种发布和接受HTML页面的方法

1、通过HTTPWATCH产检来抓取HTTP的请求内容

2、HTTP1.0是短连接 HTTP1.1长连接

   所谓的短连接就是数据发送出去就断开连接,这样每次发送都需要再连接一次。目前使用1.1版本,长连接

3、HTTP/IP协议的一个应用层协议,HTTP也是我们WEB开发的基础。

HTTP请求部分基本结构:

下面是一个简单的关于HTTP结构的介绍,具体的介绍吧可以参照HTTP 协议详解,这个可以去网络上搜索的

那么我们如何知道客户端给服务器发送的的数据,PHP提供给我们一个预定义变量_SERVER数组来保存

获得服务器的内容。具体可以查看PHP手册。

看下面的代码:

<?php
    /*print_r($_SERVER);//没有格式使用下面的方式打印
	//获得客户端内容
	foreach ($_SERVER as $key=>$val){
		echo "$key=$val  <br/>";
	}
	*/
	//那么我们如何获得客户端的IP地址
	//echo "服务器的IP地址是:".$_SERVER["REMOTE_ADDR"];

	//服务器可以通过下面的方法来拒绝客户端的请求
	if ($_SERVER["REMOTE_ADDR"] == "192.168.1.101"){
		//页面跳转,重定向
        header("Location: http://blog.csdn.net/jsh13417");
	}

?>

在服务器端,我们可以通过预定义变量$_SERVER获得客户端发送的内容,下面列举一些常用内容

HTTP_HOST:当前请求的 Host: 头信息的内容。

REMOTE_ADDR :正在浏览当前页面用户的 IP 地址DOCUMENT_ROOT:可以获取服务器的主目录
REQUEST_URI :可以回去请求资源名

HTTP请求主要方式:

get post 区别:

1、安全性:

get请求的内容是放在地址栏中的,而POST的内容是放在协议体中的

2、从提交的数据的大小看

http 协议本身并没有限制数据的大小。浏览器再对get post请求数据做限制,get请求数据 2k+35,而对post请求没有限制,他是在消息体内

这样,如何传输的数据量比较大的话,需要使用get请求。

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

防盗链技术

下面是在服务器下面保存的2个文件

<?php

    //防止防盗链
	if(isset($_SERVER["HTTP_REFERER"])){
		//取出来,判断是不是以

	}

    echo "<a href="import.php">jsh账户信息查询</a><br/>";
?>
<?php

      //防止防盗链
	if(isset($_SERVER["HTTP_REFERER"])){
		//取出来,判断是不是https://192.168.1.110/myphp/http开偷,如果是则是正确否则错误
		if(strpos($_SERVER["HTTP_REFERER"],"https://192.168.1.110/myphp/http") == 0){
			 echo "jsh的账户名:5789123085<bt/>密码:123456<br/>";
		}
	} else{ //则不是,需要跳转到百度页面
	      header("Location: http://www.baidu.com/");
	}
   
?>

现在是在window下面写个文件,直接连接上面的文件

<a href="https://192.168.1.110/myphp/http/import.php">查看用户属性<a/>

这时候会被跳转到百度页面!

HTTP响应:

基本结构看下图:

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200OK //客户端请求成功
400BadRequest //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报
//头域一起使用
403Forbidden //服务器收到请求,但是拒绝提供服务
404NotFound //请求资源不存在,eg:输入了错误的URL
500InternalServerError//服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后,
//可能恢复正常
eg:HTTP/1.1200OK(CRLF)

参考资料:

http://www.blogjava.net/joan/articles/247271.html 及传智博客视频