🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 一、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 协议详解,这个可以去网络上搜索的** **![](https://box.kancloud.cn/2016-06-03_5750fd8e72cec.jpg)** **那么我们如何知道客户端给服务器发送的的数据,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响应: 基本结构看下图: ![](https://box.kancloud.cn/2016-06-03_5750fd8e8ca7e.jpg) 状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现 5xx:服务器端错误--服务器未能实现合法的请求 常见状态代码、状态描述、说明: 200OK //客户端请求成功 400BadRequest //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报 //头域一起使用 403Forbidden //服务器收到请求,但是拒绝提供服务 404NotFound //请求资源不存在,eg:输入了错误的URL 500InternalServerError//服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后, //可能恢复正常 eg:HTTP/1.1200OK(CRLF) ![](https://box.kancloud.cn/2016-06-03_5750fd8e8ca7e.jpg) ![](https://box.kancloud.cn/2016-06-03_5750fd8eb05bb.jpg) 参考资料: [http://www.blogjava.net/joan/articles/247271.html](http://www.blogjava.net/joan/articles/247271.html) 及传智博客视频