• get/post误区(扩展知识点)

get请求传参长度的误区、get和post请求在缓存方面的区别
误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。

参考答案

实际上HTTP 协议从未规定 GET/POST
的请求长度限制是多少。对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明确这个概念,我们必须再次强调下面几点
HTTP 协议 未规定 GET 和POST的长度限制 GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度
不同的浏览器和WEB服务器,限制的最大长度不一样 要支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度
8182byte 补充补充一个get和post在缓存方面的区别:
get请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。
post不同,post做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此get请求适合于请求缓存。

  • http请求中的请求方法

1、opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送测试服务器功能(允许客户端查看服务器性能)
2、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)
3、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改
4、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
5、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)
6、Delete 请求服务器删除request-URL所标示的资源(请求服务器删除页面)
7、Trace 回显服务器收到的请求,用于测试和诊断 8、Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务器

  • 下面就具体列出 Nginx 和 Apache 的 解决方案

Nginx 解决方案
在 nginx.conf 配置文件 的 网站配置区域中添加如下代码片段,屏蔽非GET、POST类型请求,返回XXX状态码

if ($request_method !~ ^(GET|POST)$ ) {
    return 403;
}
或者
if ($request_method !~* GET|POST) {
    return 403;

}
  • Apache 解决方案

在站点配置文件 .htaccess 中添加如下代码片段

<Location />
    <LimitExcept GET POST>
        Order Allow,Deny
        Deny from all
    </LimitExcept>
</Location>