Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php http接受头是如何工作的?_Php_Http Headers - Fatal编程技术网

Php http接受头是如何工作的?

Php http接受头是如何工作的?,php,http-headers,Php,Http Headers,这是我的密码 <?php $url = @$_POST["ekleme"]; if (filter_var($url,FILTER_VALIDATE_URL) === FALSE) { die("Geçersiz link!"); } $cparams = array('http'=>array('method'=>"GET",'Accept'=>'image/jpg,image/gif,image/png')); $context = stream_conte

这是我的密码

<?php $url = @$_POST["ekleme"];
if (filter_var($url,FILTER_VALIDATE_URL) === FALSE) {
    die("Geçersiz link!");
}

$cparams = array('http'=>array('method'=>"GET",'Accept'=>'image/jpg,image/gif,image/png'));
$context = stream_context_create($cparams);
$fp = @fopen($url, 'rb', false, $context);
if (!$fp) die("Problem with url");
$meta = stream_get_meta_data($fp);
var_dump($meta);

它继续展示其他不相关的东西。我是不是明白了Accept header是如何工作的,还是我做错了什么?如果内容类型是特殊的,是否有办法要求服务器只发送数据?

当接收文件时,您负责检查内容类型。accept头只是告诉服务器您喜欢哪种内容类型,而不是您需要哪种

下面是一个如何检查返回内容类型的示例

$meta = stream_get_meta_data($fp);
$allowed = array("image/jpg", "image/gif", "image/png");
foreach($meta['wrapper_data'] as $header) {
  if(preg_match('/content-type: (.*)/i', $header, $matches)) {
    if(!in_array(strtolower($matches[1], $allowed)) {
      die("Invalid content type");
    }
  }
}

Accept头允许客户端告诉服务器它可以处理什么类型的数据

服务器可能会完全忽略它(如果资源仅以一种格式存在,这是正常的),或者它可能会使用它来选择最适合客户端的格式(如果没有合适格式的数据,它可能会响应406不可接受错误)

你正在经历前一种行为。URL指向一个PDF文件。服务器没有设置为在PDF和其他格式之间做出决定,因此它不注意Accept头并返回PDF

是否有一种方法可以要求服务器仅在内容类型特殊时发送数据

accept标头已尽可能接近

如果要避免下载可能无法处理的大型文件,请发出HEAD请求,并在发出GET请求之前检查响应的内容类型

$meta = stream_get_meta_data($fp);
$allowed = array("image/jpg", "image/gif", "image/png");
foreach($meta['wrapper_data'] as $header) {
  if(preg_match('/content-type: (.*)/i', $header, $matches)) {
    if(!in_array(strtolower($matches[1], $allowed)) {
      die("Invalid content type");
    }
  }
}