• HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码


    (请求行的)请求方法 包括:

    GET,POST,HEAD,PUT,TRACE,DELETE,OPTIONS

    注意:这些请求方法虽然是 HTTP 协议规定的,但是 Web Server 未必允许或支持这些方法。

    HEAD 和 GET 基本一致,只是不返回内容,比如只是确认一个内容还正常存在,不需要返回具体内容。演示:

    GET

    HEAD

    HEAD 方法只返回了响应的头信息。

    PUT,往服务器上的资源传输内容:

    服务器未必支持 HTTP 协议所规定的方法。

    TRACE, 例如使用了代理上网(例如访问 news.163.com),可以使用 TRACE 查看代理有没有修改 HTTP 请求(163.com 的服务器就会把最后收到的请求返回):

    同样 Not Allowed,对方的服务器不允许使用 TRACE 方法。

    OPTIONS,返回服务器可用的请求方法:

    OPTIONS 也不被允许。

    用自己的本地服务器测试:

    (响应行的)状态码、状态文字

    状态码是用来反应服务器的响应情况;

    状态文字是用来描述状态码的。

      状态码         定义     说明
      1XX   信息   接收到请求,继续处理
      2XX   成功   操作成功地收到,理解和接受
      3XX   重定向   为了完成请求,必须采取进一步措施
      4XX   客户端错误             请求的语法有错误,或者不能完全被满足              
      5XX   服务端错误    服务器无法完成明显有效地请求

    常见的状态码

    200 OK:服务器成功返回网页;

    301 / 302:永久 / 临时 跳转,例:

    301 重定向:

    运行 redirect.php

    <?php
    //301永久重定向
    header('Location:http://www.baidu.com', true, 301);
    

      

    302 重定向:

    运行 redirect.php

    <?php
    //302临时重定向
    header('Location:http://www.baidu.com');
    

      

    注意:当 post 数据发送到 a.php,a.php(header("Location:b.php");) 重定向到了 b.php(print_r($_POST);),导致的结果是 b.php 接受到的数据是 Array ()。

    原因:从表单到 a.php 是 post 请求,从 a.php 到 b.php 变成了 get 请求(从 f12 开发人员工具中可以看出)

    解决方案:

    如果想保持 post 请求,可以使用 307 重定向中保持原有数据。a.php:

    <?php
    header("Location:b.php", true, 307);

    即可。此时 a.php 到 b.php 仍然是 post 请求。

    例:

    test.html

    <!doctype html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    </head>
    <body>
    	<form action="a.php" method="post">
    		username: <input type="text" name="usernam">
    		<input type="submit" value="提交">
    	</form>
    </body>
    </html>
    

    a.php

    <?php
    header('Location:b.php');
    

    b.php

    <?php 
    error_reporting(0);
    print_r($_POST);
    

     

    修改 b.php

    <?php
    header('Location:b.php', true, 307);
    

     

    304 Not Modified:未修改(浏览器缓存),例如

    当第一次访问一个页面:

    当刷新几次页面:

    客户端(Chrome)告诉服务我有这张图片,并且告诉服务器该图片时间上的编号(If-Modified-Since 和 If-None-Match),询问服务器该图片是否过期,如果过期则传给我最新的图片;服务器告诉浏览器(ETag 和 Last-Modified),这张图片没有进行修改过,因此浏览器就从缓存中取出这张图片,减小了服务器传输的压力。

    使用 telnet 进行缓存的测试,正常 GET 请求图片:

    返回二进制的图片信息;

    加上以下信息:

    If-Modified-Since:Sun, 02 Nov 2014 13:46:57 GMT
    If-None-Match:"1860000000012c5-9d39-506e076b8dbb5"

    返回:

    失败的状态码:

    404:请求的网页不存在;

    503:服务器暂时不可用;

    500:服务器内部错误

  • 相关阅读:
    Hostker云主机
    Orz 终于有了自己的博客地址
    BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
    BZOJ 1636: [Usaco2007 Jan]Balanced Lineup
    BZOJ 2252: [2010Beijing wc]矩阵距离
    BZOJ 2253: [2010 Beijing wc]纸箱堆叠
    BZOJ 无数据题集合
    BZOJ 1087: [SCOI2005]互不侵犯King
    BZOJ 3236: [Ahoi2013]作业
    POJ2352:Stars
  • 原文地址:https://www.cnblogs.com/dee0912/p/4631718.html
Copyright © 2020-2023  润新知