Http请求方法和响应状态码整理

 更新时间:2016年11月25日 15:41  点击:1739
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,格式如下:

可见请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。

Http请求方法和响应状态吗整理
HTTP请求方法:

    GET: 请求指定的页面信息,并返回实体主体。
    HEAD: 只请求页面的首部。
    POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
    PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE: 请求服务器删除指定的页面。
    OPTIONS: 允许客户端查看服务器的性能。
    TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
    PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
    MOVE: 请求服务器将指定的页面移至另一个网络地址。
    COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
    LINK: 请求服务器建立链接关系。
    UNLINK: 断开链接关系。
    WRAPPED: 允许客户端发送经过封装的请求。
    Extension-mothed:在不改动协议的前提下,可增加另外的方法。


HTTP响应状态码:
① 客户方错误
100  继续
101  交换协议
② 成功
200  OK
201  已创建
202  接收
203  非认证信息
204  无内容
205  重置内容
206  部分内容
③ 重定向
300  多路选择
301  永久转移
302  暂时转移
303  参见其它
304  未修改(Not Modified)
305  使用代理
④ 客户方错误
400  错误请求(Bad Request)
401  未认证
402  需要付费
403  禁止(Forbidden)
404  未找到(Not Found)
405  方法不允许
406  不接受
407  需要代理认证
408  请求超时
409  冲突
410  失败
411  需要长度
412  条件失败
413  请求实体太大
414  请求URI太长
415  不支持媒体类型
⑤ 服务器错误
500  服务器内部错误
501  未实现(Not Implemented)
502  网关失败
504  网关超时
505 HTTP版本不支持

下面用php实现了一个对css进行压缩和解压缩的小程序,暂不适用于js的操作。通过这个案例可以学习php字符替换和正则替换的技术。

将css代码压缩能够减小文件的体积,从而减小了网络传输量和带宽占用,减小了服务器的处理的压力


源码:

 代码如下 复制代码


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<?php 

$string = trim(stripslashes($_POST['code'])); //stripslashes()函数删除转义字符(反斜杠)

if(!empty($string)){

if($_POST['method'] == '压缩' ){

$string = css_compress($string);

}elseif($_POST['method'] == '解压缩' ){

$string = css_decompress($string);

}

}else{

$string = '';

}

function css_compress($string){

//压缩

$string = str_replace("\r\n","",$string); //首先去掉换行

$string = preg_replace("/(\s*\{\s*)/","{",$string);

$string = preg_replace("/(\s*\;\s*\}\s*)/","}",$string); //去掉反括号首位的空格和换行,和最后一个;

$string = preg_replace("/(\s*\;\s*)/",";",$string);

return $string;

}

function css_decompress($string){

//解压

$string = css_compress($string); //为了效果更好,解压前,先压缩至最简状态

$string = str_replace("{","\r\n{\r\n\t",$string);

$string = str_replace("}","\r\n}\r\n\r\n",$string); 

$string = str_replace(";",";\r\n\t",$string);

$string = str_replace("*/","*/\r\n",$string);

return $string;

}

?>

<body>

  <div style="width:800px;height:500px;text-align:center">

  <p><strong>请将css代码粘贴到下面框中,然后选择压缩/解压缩</strong></p>

  <form action="" method="post" name="css_code">

    <textarea style="width:90%;height:460px;padding:5px;" name="code"><?php echo $string; ?></textarea>

    <br />

    <input type="submit" name="method" value="压缩" />

    <input type="submit" name="method" value="解压缩" />

  </form>

  </div>

</body>

</html>

最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠

先我想说,百度上那些转来转去的文章都是扯淡!
有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。

下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结:

相同点:

当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范

不同点:

1. 通常情况:

_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

2. 当服务器为非80端口时:

_SERVER["HTTP_HOST"] 会输出端口号,例如:111cn.net:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:

httpd.conf配置如下:

 代码如下 复制代码

<virtualhost *>
ServerName 111cn.net
ServerAlias www.111cn.net
</virtualhost>
客户端访问域名www.111cn.net
_SERVER["HTTP_HOST"] 输出 www.111cn.net
_SERVER["SERVER_NAME"] 输出 111cn.net

所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。

星际的兵种属性随着对平衡性的调节,会进行修改。如果这样的话,我们就要考虑减少一个事件和具体处理的关联性。


比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。


待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。


思路:建立一个接口,让所有的部队或者建筑实现。

 

职责链模式(Chain of Responsibility)示例:

 代码如下 复制代码

<?php

//被原子弹攻击的接口

interface NuclearAttacked {

    //处理被原子弹攻击的方法,参数为投放点的x和y坐标

  public function NuclearAttacked($x, $y);

}

//人族的基地,实现被原子弹攻击的接口,其他的内容暂时不考虑

class CommandCenter implements NuclearAttacked {

    //处理被原子弹攻击的方法,参数为投放点的x和y坐标

  public function NuclearAttacked($x, $y)

  {

    //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉

  }

}

//巡洋舰(俗称大和),实现被原子弹攻击的接口,其他的内容暂时不考虑

class Battlecruiser implements NuclearAttacked {

    //处理被原子弹攻击的方法,参数为投放点的x和y坐标

  public function NuclearAttacked($x, $y)

  {

    //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉

  }

}

//原子弹类

class Nuclear {

//被原子弹攻击的对象

public $attackedThings;

    //添加被原子弹攻击的对象

  public function addAttackedThings($thing)

  {

    //添加被原子弹攻击的对象

    $this->attackedThings[] = $thing;

  }

    //原子弹爆炸的方法,参数为投放点的x和y坐标

  public function blast($x, $y)

  {

      //把爆炸的事情交给所有涉及的对象,让他们自己处理

       foreach ($this->attackedThings as $thing)

       {

           //把爆炸的事情交给所有涉及的对象,让他们自己处理

          $thing->NuclearAttacked($x, $y);

       }

  }

}

//新建一个基地对象

$CommandCenter = new CommandCenter();

//新建一个巡洋舰对象

$Battlecruiser = new Battlecruiser();

//造了一颗原子弹

$Nuclear2 = new Nuclear();

//假设投放成功,那个瞬间一个基地对象和一个巡洋舰对象在杀伤范围内

$Nuclear2->addAttackedThings($CommandCenter);

$Nuclear2->addAttackedThings($Battlecruiser);

//原子弹爆炸,这样就把这个事件交给那些涉及的对象的处理方法,假设投放点的x和y坐标是2353, 368

$Nuclear2->blast(2353, 368);

?>

用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。

在php中获取图片大小我们可以使用getimagesize函数,这个函数是用于获取图像的尺寸的函数,下面我们一起来看例子。

利用getimagesize函数就可以获取

 代码如下 复制代码

/*

    
php 获取图片尺寸的方法

*/

$url='/images/201203/08/1331189004_28093400.jpg';
 
$imageInfo=getimagesize($url);
print_r($imageInfo);
/*

 
Array

(

    
[0] => 139

    
[1] => 162

    
[2] => 2

    
[3] => width="139" height="162"

    
[bits] => 8

    
[channels] => 3

    
[mime] => image/jpeg

)

 
*/

利用我们获取的宽度与高度我们对图片进行设置

 代码如下 复制代码

<?php/* 1.jpg为你想获得其尺寸的图片 */
$arr = getimagesize("1.jpg");
/**
 * 这里$arr为一个数组类型
 * $arr[0] 为图像的宽度
 * $arr[1] 为图像的高度
 * $arr[2] 为图像的格式,包括jpg、gif和png等
 * $arr[3] 为图像的宽度和高度,内容为 width="xxx" height="yyy"
 */
/* 以下两行代码输出的内容都是一样的 */
echo "<img src="1.jpg" $arr[3] alt="" />";
echo "<img src="1.jpg" width="$arr[0]" height="$arr[1]" alt="" />";
?>

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • Java如何发起http请求的实现(GET/POST)

    这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 解决Java处理HTTP请求超时的问题

    这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04