HTTP协议(HyperText Transfer Protocol 超文本传输协议),是浏览器接收web页面和发送web页面请求的标准协议。HTTP协议是基于TCP/IP协议的,版本号有Http1.0和Http1.1两种,现在主要使用Http1.1版本。

  HTTP协议包含大量的消息头信息,用户告诉浏览器或者服务器,该消息体想做什么...而消息体是告诉浏览器或者服务器,它也是我们添加的网页信息,具体该怎么做...

  网页在传输过程中,HTTP的消息头是十分重要的...那么PHP是如何操作消息头的呢?

 一、PHP中的$_SERVER数组

  $_SERVER数组是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。

  • 获取浏览当前页面的IP地址:

   $_SERVER['REMOTE_ADDR']

  • 防盗链技术的实现

  $_SERVER['HTTP_REFERER']:引导用户代理到当前页的前一页的地址

  示例:

      <?php
    //http防盗链技术
    if(isset($_SERVER['HTTP_REFERER'])){  //判断是否有该属性值(外网没有,本网有)
  //定义字符串出现的第一个位置
  if(strpos($_SERVER['HTTP_REFERER'],'http://localhost/phpWeb/7-25/')==0){  //判断是否来自本网站
  echo '你好,欢迎访问';
  }else{
  header("Location:err.php");
  }
    }else{   header("Location:err.php"); //重新定义报头信息,进行跳转
  }
      ?>

 二、PHP中的header函数

  PHP中的header函数用于服务器端重新定义http的消息头。

  • 跳转到另一个页面

  header('Location:url');

  • 网页禁止缓存

  //由于浏览器的差别,不同浏览器有不同的禁缓存结构,通常三个都写...

  header('Expires:-1');  

  header('Cache-Control:no-cache');

  header('Pragma:no-cache');

  • 等待几秒后自动跳转到另一页面

  示例:

    <?php
  echo '5秒后自动跳转到百度首页面';
  header('Refresh:5,url=http://www.baidu.com'); //等待5秒后,自动重新定向到百度首页面
    ?>
  • 文件下载

  header('Content-type:application/octet-stream');
  header('Accept-Ranges:bytes');
  header("Accept-Length:$file_size");
  header("Content-Disposition:attachment;filename=".$filename);

function filedown($filename){

		//转换文件名编码,防止乱码(针对中文汉字,php文件中需将utf-8码转换为gb2312。古老的文件系统只识别gb2312码)
$filename=iconv('utf-8','gb2312',$filename); //判断文件是否存在
if(!file_exists($filename)){
echo '文件不存在';
return ;
} //计算文件大小
$file_size=filesize($filename); //返回文件
header('Content-type:application/octet-stream');
header('Accept-Ranges:bytes');
header("Accept-Length:$file_size");
header("Content-Disposition:attachment;filename=".$filename); //打开文件
$fp=fopen($filename,"r"); $buffer=1024; //一次读出多少内容,单位(byte)
//读取文件并输出
while(!feof($fp)){ //判断文件是否读完
$res=fread($fp,$buffer);
echo $res;
} //关闭文件
fclose($fp);
  }

 三、http请求数据时,get和post方法的区别 

  1、安全性:get方法请求数据时,数据显示在地址栏和http请求行中

        post方法请求的数据时,数据放在消息体中,更安全。

  2、提交的数据量大小:get请求的数据量大小为(2k+35)字节

              post无限制(由于数据在消息体中)

  3、利用收藏夹收藏页面时,get方法更有利于保存..

 四、http响应状态码

  服务器端响应格式:HTTP版本号   状态码   原因

  状态码:

  100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

  200~299:表示成功接收请求并已完成整个处理过程,常用200

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

  400~499:客户端的请求有错误,常用404

  500~599:服务器端出现错误,常用500

  

web中的HTTP协议的更多相关文章

  1. 【笔记JS/HTML/CSS】web中的HTTP协议(1)

    最近都在coursera刷课,加上自己课业也忙起来了,总是忘记写学习笔记ORZ 自省ing... 在写HTML的时候,form表单需要通过HTTP协议向服务器提交.查询数据(如下图) 客户端通过HTT ...

  2. 优化Web中的性能

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的 ...

  3. 详解Objective-C中委托和协议

    Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托. AD: ...

  4. Web中的性能优化

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争.优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺 ...

  5. 在web中使用HTTPS

    背景 目前网上流行的是HTTP协议,HTTPS协议还在逐步推广的过程中. HTTP协议以明文发送内容,容易被攻击者窃听.HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份[ ...

  6. Web应用与应用层协议

    Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...

  7. web应用与http协议

    web应用 Web应用程序是一种可以通过web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户端/ ...

  8. 第五章Web应用与应用层协议

    Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...

  9. 08.Web服务器-2.HTTP协议介绍

    HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF ...

随机推荐

  1. 洛谷P1251 餐巾计划问题(费用流)

    传送门 不得不说这题真是思路清奇,真是网络流的一道好题,完全没想到网络流的建图还可以这么建 我们把每一个点拆成两个点,分别表示白天和晚上,白天可以得到干净的餐巾(购买的,慢洗的,快洗的),晚上可以得到 ...

  2. 滴滴插件化方案 VirtualApk 源码解析

    那么其中的难点很明显是对四大组件支持,因为大家都清楚,四大组件都是需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以现在基本都采用一 ...

  3. Python之路迭代器协议、for循环机制、三元运算、列表解析式、生成器

    Python之路迭代器协议.for循环机制.三元运算.列表解析式.生成器 一.迭代器协议 a迭代的含义 迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的 ...

  4. Python变量类型的强制转换

    当我们需要对数据的类型转换时,只需要将数据类型作为函数名即可. 下面给出的函数可以执行数据类型之间的转换,函数返回一个新的对象,表示转换的值 函数格式 使用示例 描述 int(x [,base]) i ...

  5. python wraps装饰器

    这是一个很有用的装饰器.看过前一篇反射的朋友应该知道,函数是有几个特殊属性比如函数名,在被装饰后,上例中的函数名foo会变成包装函数的名字 wrapper,如果你希望使用反射,可能会导致意外的结果.这 ...

  6. 9.tab栏切换

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. Centos7.4 更换国内yum源

    1.进入yum源配置文件夹.(配置之前先看看有没有安装wget命令呢,没的话可以先用当前的yum源安装一下再说.yum -y install wget) 2.转到配置文件目录  cd /etc/yum ...

  8. 【转】 关于IDEA javax.servlet.http.HttpServletRequest; 不存在 解决方案

    昨天从eclipse导入了一个web项目到idea,想运行一下,结果发现 servlet报红... 没有包,第一反应就是eclipse需要设置Targeted Runtimes,但是idea的设置是啥 ...

  9. C++_异常7-exception类

    C++异常的主要目的是为了设计容错程序提供语言级支持. 即异常使得在程序设计中包含错误处理功能更加容易,以免事后采取一些严格的错误处理方式. 异常的灵活性和相对方便性激励着程序员在条件允许的情况下在程 ...

  10. [USACO18FEB]Taming the Herd

    Luogu4267 题解 对于\(dp[i][j]\) , 预处理出一些转移一步的次数 , 然后可以很方便的转移 : \(dp[i][j]=min(dp[k][j-1]+cnt[j][i])\)