http协议以及防盗链技术

  http协议,又称为超文本传输协议,顾名思义,http协议不仅能传输文本,还能传输图片,视频,压缩包等文件,http协议是建立在tcp/ip协议的基础之上的,http协议对php程序员来讲可以说是重中之重了;

  http请求基本结构分为:请求行;消息头;实体内容;

  请求行:

    GET/xxx/xxx.html  HTTP/1.1          //HTTP/1.1是http协议版本,1.1支持长连接,1.0支持短连接,目前普遍使用1.1版本;

  消息头(请求报头):

    Accept:*/*         //表示客户端可接受什么类型的资源,*表示通配符,表示可以接受任何类型的资源;

    Referer : http://localhost:80/XX.html        //表示用户是从哪里链接过来的(之后防盗链技术会详解);

    Accept-Launguage: zh-cn                 //表示页面可以支持哪种语言;

    User-Agent: Mozila/4.0                    //表示浏览器的内核以及操作系统;

    Accept-Encoding:gzip,deflate    //表示客户端支持什么类型的数据压缩格式;

    Host:localhost:80                       //表示主机号和端口,这个是给tcp/ip协议识别的;

    Connection:Keep-Alive                //表示长连接,不会立刻中断请求;

  实体内容                                               //表示客户端向服务器传递了哪些资源;

 

  http响应内容:

    HTTP/ 1.1  200  OK      //200表示服务器请求成功;其余常见的状态码在后面说;

    Server:          //表示服务器信息;

    Date:            //浏览器请求该页面的时间;

    Content-Length:                          //表示服务器回送了多少字节的资源;

    Content-Type:                             //文档类型及使用什么编码;

    Last-Modified:         //所请求的资源最新更新时间;

    Refresh:1;url=http:xxx.com    //间隔多少秒之后重定向;可在header()函数中写入实现X秒后重定向页面;

    Content-Disposition:        //这个关于文件下载;

    Transfer-Encoding:         //文件下载

    Set-Cookie:            

    Keep-Alive:timeout=5,max=99    //表示长连接可维持多少秒;

    Expires: -1 ;             //控制页面是否支持缓存;浏览器默认支持缓存,在header函数中输入以下三个头信息;

    Cache-Control: no-cache ;       //缓存存在的时间是可以自行指定的;

    Pragma:  no-cache ;         //控制页面是否支持缓存;

  http响应的状态码详解可以点击下面链接查阅:https://baike.baidu.com/item/HTTP状态码/5053660?fr=aladdin

  常用的有302,304,202,404状态码:302状态码一般用于做重定向;404状态码通常是所查找的资源不存在;304码一般在当http发送请求资源时发现缓存中有相同资源,浏览器则会向服务器端发送一个(Last-Modified:)该资源最近更新的时间参数,由服务器去验证该资源的最近更新时间是否一致,如一致说明该资源没有进行更新则向缓存取出该资源;

  在PHP中你可以通过 echo  $_SERVER   来获取所有关于该页面HTTP协议的所有内容;

  常用的有:

    HTTP_HOST      //主机名;

    DOCUMENT_ROOT    //获取apche的主目录;

    REQUEST_URI    //获取请求的资源名;

    REMOVE_ADDR    //获取当前访问客户端的IP地址;

    HTTP_REFERER            //告诉服务器我是从哪个页面链接过来的;

      用法:  $_SERVER[ ' REMOVE_ADDR ' ] ;

  可以使用header()语句向http响应头写入信息;

  http的请求方式有两种,GET请求和POST请求;从安全性而言,GET请求会显示在地址栏上,相比POST而言更不安全;GET请求处理速度更快,但是只可以处理2K以内的数据,多数用于查数据,而POST虽相对较慢但不限制资源大小,多数用于增、删、改;

    $_GET :可传输多个参数,eg:http://xxx/xxx.php?字段名=参数&字段名=参数;使用empty($_GET('字段名'))验证是否接收到参数;

    $_POST :用于传递数据,多数用于增删改;在php.ini文件中关闭register_globals设置,防止SQL注入;

  简单的防盗链技术:

    if( isset ( $_SERVER[ ' HTTP_REFERER' ] ) ){          //这条语句判断HTTP协议里是否有REFERER值;

        if( strpos ( $SERVER[ ' HTTP_REFERER' ] ,“ http://页面主址 ” ) == 0 ){   //这条语句判断REFERER值是否从本网站链接进来;

            echo   显示信息  ;

        }else{

            header( " Location:  警告页面 " );      //如进入else语句则说明该用户是盗链过来的,跳转到警告页面;

        }

    }else{

      header( " Location:  警告页面 " );

    }

    

  


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端 flexible.js 布局详解

原本想直接引入原文链接,但是又担心作者哪天想不开注销账号,这么好的一篇文章看不到了,还是转载一下吧(/ω\)。 另外推荐一篇好文:移动端rem自适应实操讲解 本文讲的通过 flexible.js 实现了rem自适应,有了…

Gradle善良:获得更多的依赖性见解

在我们的大多数项目中,我们都依赖于其他代码,例如库或其他项目。 Gradle有一个不错的DSL来定义依赖关系。 依赖性在依赖性配置中分组。 这些配置可以自己创建,也可以通过插件添加。 一旦定义了依赖项,我们就可以通过dependencies任…

DotnetCharting控件的破解方法

在.net使用DotNetCharting控件生成报表统计图总结 文章中,不少博友提出“1.生成的图片带超链接导向官网,如何处理呀?2.我使用这个控件后,图形可以显示出来。但是发现一个小问题。就是在图形的左上方和图形的下面都隐含了超链接,鼠…

Android开发利器之ActivityTracker

版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/113 Android开发利器之ActivityTracker 今天在群里面划水,有个小伙伴问到一个问题,”刚进公司 清单文件的activity 较…

js css模仿打字效果

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#myDiv{display: inline-block;width:500px;height:300px;background-color:rgba(0,0,0,0.3);colo…

iframe 高度根据子页面来确定

标题描述一、解决方法解决代码二、关于高度问题简单讲一下jquery中的 height()&#xff0c;innerHeight()、outHeight()&#xff0c;js中的offsetHeight、clientHeight、scrollHeight。如何获取没有给出高度的元素的高度&#xff1f;详细介绍offsetHeight,clientHeight,scrollH…

避免许多if块进行验证检查

在某些情况下&#xff0c;我们需要先验证输入数据&#xff0c;然后再将其发送到业务逻辑层进行处理&#xff0c;计算等。这种验证在大多数情况下是孤立完成的&#xff0c;或者可能包括与外部数据或其他输入的某些交叉检查。 看下面的示例&#xff0c;该示例验证用户输入的注册数…

谷歌逐步取消对IE6的支持

1月30日&#xff0c;据国外媒体报道&#xff0c;谷歌周五宣布&#xff0c;截至3月1日&#xff0c;谷歌将不再其谷歌Docs和谷歌网站服务支持IE6。如果IE用户想使用那些产品&#xff0c;他们必须至少升级到版本7&#xff0c;如同“其他许多公司已经停止支持如Internet Explorer 6…

国内手机号正则表达式

java的写法&#xff1a; String pattern "^((1[358][0-9])|(14[57])|(17[0678])|(19[7]))\\d{8}$"; javascript的写法&#xff1a; var pattern /^((1[358][0-9])|(14[57])|(17[0678])|(19[7]))\d{8}$/; 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.co…

layui 子页面写弹出框覆盖父页面,以及给弹框中的表单赋值

咋说呢&#xff0c;因为对 layui 不太熟悉&#xff0c;这个弹出框搞了好久&#xff0c;看了好多解决方案&#xff0c;大致尝试了一下其中几种&#xff0c;在坑中无法自拔。。。总之终于搞出来了&#xff0c;在这里分享一下我的笔记。 着急的直接 戳这里 看解决代码。 尝试 1、…

html实现文字垂直居中且设置间隔

使用table和table-call布局 将表格作为一个table表&#xff0c;使用table-cell定义每个单元格的布局为table-cell, 抛出display的有效值 单元格中间的间隔使用 border-spacing:10px; border-collapse: separate;定义单元格vertical-align: middle; display: table-cell;代码源码…

入世与出世

同情恰好有两种。一种同情怯懦感伤&#xff0c;实际上只是心灵的焦灼。看到别人的不幸&#xff0c;急于尽快脱身出来&#xff0c;以免受到感动&#xff0c;陷入难堪的境地。这种同情根本不是对别人的痛苦抱有同感&#xff0c;而只是本能地予以抗拒&#xff0c;免得它触及自己的…

Hibernate隐藏的宝石:pooled-lo优化器

介绍 在这篇文章中&#xff0c;我们将揭示一个序列标识符生成器&#xff0c;​​它结合了标识符分配效率和与其他外部系统的互操作性&#xff08;同时访问底层数据库系统&#xff09;。 传统上&#xff0c;有两种序列标识符策略可供选择。 序列标识符&#xff0c;对于每个新值…

vue inheritAttrs、$attrs和$listeners使用

inheritAttrs、$attrs和$listeners使用场景&#xff1a; 组件传值&#xff0c;尤其是祖孙组件有跨度的传值。 &#xff08;1&#xff09;inheritAttrs 属性说明&#xff1a;https://cn.vuejs.org/v2/api/#inheritAttrs 说明比较晦涩。 组件传值一般是通过props传值的。inhe…

鼠标滚轮事件及解决滚轮事件多次触发问题

转载&#xff1a;https://www.cnblogs.com/jjxhp/p/11736066.html#_label0 一、滚轮事件的 js 写法 二、jQuery写法 三、参考 四、滚轮事件滚动过快&#xff0c;事件触发两次 一、js //判断鼠标滚轮滚动方向 if (window.addEventListener){ //FF,火狐浏览器会识别该方法wind…

Leetcode 2976. Minimum Cost to Convert String I

Leetcode 2976. Minimum Cost to Convert String I 1. 解题思路2. 代码实现 题目链接&#xff1a;2976. Minimum Cost to Convert String I 1. 解题思路 这道题思路上其实是非常直接的&#xff0c;本质上就是给出有向图之后&#xff0c;求出有向图上任意两点之间的最短距离&…

仍不切换到Java 8的6个理由

Java 8很棒。 期。 但是……在我们有机会玩耍并玩弄它之后&#xff0c;就该退出了&#xff0c;避免吃盐。 所有的好东西都是有代价的&#xff0c;在这篇文章中&#xff0c;我将分享Java 8的主要痛点。请确保在升级和放弃7之前您已经意识到了这些痛点。 1.并行流实际上会使您减…

硬币回收价格

1957年 1分 1元1960年 1分 80元 1962年 1分 30元1965年 1分 350元1966年 1分 180元1967年 1分 350元1968年 1分 88元1969年 1分 150元1977年 1分 320元1981年 1分 5元1988年 1分 300元1989年 1分 150元1990年 1分 180元1995年 1分 0.5元1955年 2分 15元1957年 2分 2元1958年 …

13 字符串相关函数

# ### 字符串相关函数 # *capitalize 字符串首字母大写 strvar "this is a dog" res strvar.capitalize() print(res)# *title 每个单词的首字母大写 (非字母隔开的单词) strvar "this is123a dog" res strvar.title() print(res)# *upper 将所有字母变…

Vue 生命周期LIFECYCLE是8个吗?

vue生命周期钩子个数是&#xff1a;11个。 export const LIFECYCLE_HOOKS [beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed,activated,deactivated,errorCaptured] github地址&#xff1a; https://github.com/vuejs/vue/blob/dev/…