注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Php接收自定义HTTP请求头参数或发送响应头参数  

2017-09-22 10:26:24|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
当打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器会根据HTTP请求头的内容生成当次请求的内容发送给浏览器。一次HTTP请求头的具体内容,范例大体如下:

GET / HTTP/1.1
Host: 593668.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.12 Safari/535.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3

这个常规的请求头信息,说明如下:
Accept-Language表示浏览器所支持的语言类型;
  zh-cn表示简体中文;zh 表示中文;
  q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型。
Accept-Charset表示浏览器支持的字符编码。
Accept:表示浏览器支持的 MIME 类型
Accept-Encoding: gzip, deflate表示浏览器支持的压缩编码是 gzip 和 deflate。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)表示使用的用户代理
Host: 表示域名
Connection: Keep-Alive表示持久连接;
以上都是常规请求头,但最近的一个APP项目为了安全起见,要求自定义请求头,每次都必须带上token参数。格式如下:

Safe:{"user":"593668","token":"2efdso-P--P-4tU4gzqVvMDGCcKzbke9N3-P-k01BRVWXoPmocvlHnsiXwcsC6Je49wywsL2kyjaTqYu6D","platfrom":"android"}

那么象这种自定义的请求头其实PHP是有相应的接收函数的,getallheaders()或apache_request_headers(),不过这两个函数其实在早期的PHP版本里都是没有的,所以需要改造下来适应。相关的函数定义和代码如下:

<?php

//如果函数if (!function_exists('getallheaders')){
function getallheaders() {
global $_SERVER;
$headers = '';
foreach ($_SERVER as $name => $value){
if (substr($name, 0, 5) == 'HTTP_'){
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}

$headerarr=getallheaders(); //接收所有请求头参数
print_r($headerarr); //打印所有请求头参数

?>

那么接下来就是要来用curl模拟下提交,来看看能不能够获取[将上述代码保存路径相应填入下面]。

<?
$crl = curl_init("http://593668.com/testheader"); //这里的地址请自行修改
$headr = array();
$headr[] = 'Safe:{"user":"593668","token":"2efdso-P--P-4tU4gzqVvMDGCcKzbke9N3-P-k01BRVWXoPmocvlHnsiXwcsC6Je49wywsL2kyjaTqYu6D","platfrom":"android"}'; //自定义的请求头
curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
$rest = curl_exec($crl);
curl_close($crl); //关闭
print_r($rest); //打印接收到的变量
?>

打印的页面效果如下:

Array ( [Host] => localhost [Accept] => */* [Safe] => {"user":"593668","token":"2efdso-P--P-4tU4gzqVvMDGCcKzbke9N3-P-k01BRVWXoPmocvlHnsiXwcsC6Je49wywsL2kyjaTqYu6D","platfrom":"android"} ) 1

可以看出,已经接受到相应的参数了。就这样,利用请求头信息判断用户的权限,再来返回相应的内容,这样对于网站服务器的安全性会有更高的保证,因为常规的利用浏览器来访问是绝对不可以生成这种特定的请求头的,也就避免了一些信息泄漏的问题。
同样道理,发送自定义HTTP响应头参数,同样可以让APP客户端判断接收服务端消息的正确性。相关代码更简单,直接使用header函数即可。

header('Safe:{"user":"593668","token":"2efdso-P--P-4tU4gzqVvMDGCcKzbke9N3-P-k01BRVWXoPmocvlHnsiXwcsC6Je49wywsL2kyjaTqYu6D","platfrom":"android"}');

好了,结合这两个技巧,也就可以让APP跟服务端的信息交互更安全。
}
  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018