HTTP协议

作者: 独念白 | 来源:发表于2018-01-02 17:15 被阅读39次

    一、什么是HTTP协议?

    是什么?

    HTTP协议:即超文本传输协议。

    做什么?

    主要用于:用于服务器跟客户端进行一个通讯的协议。

    怎么做?

    工作机制:在客户端跟服务器之间以request-response Protocol(请求-回复协议)工作。

    二、HTTP协议传输请求方法:

    标准Http协议支持八种请求方法,即:

    1.get

    是什么?

    GET是HTTP传输的常用方法

    做什么?

    从指定服务器中获取数据。

    怎么做?

    使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器

    DEMO:/test/demo_form.jsp?name1=value1&name2=value2

    其中name1对应的值就是value1,name2对应的值就是value2,中间用&分割

    特点:

    ~GET请求能够被缓存

    ~GET请求会保存在浏览器的浏览记录中

    ~以GET请求的URL可以保存为浏览器书签

    ~GET请求有长度限制,大小为2K。其实此长度限制,是由于浏览器对URL有一个长度限制。此文有讲述。

    ~GET请求主要用于获取数据

    2.post

    是什么?

    HTTP常用的方法。

    做什么?

    提交数据给指定服务器处理。

    怎么做?

    使用POST请求,查询字符串在POST中单独存在,和HTTP请求一起发送到服务器。

    DEMO:

    POST /test/demo_form.jsp HTTP/1.1

    Host: w3schools.com

    name1:value1

    name2:value2

    特点:

    ~POST请求不能被缓存下来

    ~POST请求不会保存在浏览器浏览记录中

    ~以POST请求的URL无法保存为浏览器书签

    ~POST请求没有长度限制

    3.head

    与GET请求类似,不同在与服务器只返回HTTP头部信息,没有页面内容

    4.delete

    顾名思义,Delete方法就是通过http请求删除指定的URL上的资源啦

    HTTP提供了一个与PUT方法对应的DELETE方法。一个DELETE请求将需要从Web服务器删除的内容指定为请求行中的资源部分。

    DELETE方法唯一有趣的地方在于当你接收了一个标识为200 OK的响应的时候,那并不意味着指定的资源已经被删除了。那仅仅说明服务器接收到了删除资源的命令。这一例外允许了出于安全考虑的人为的干预,Delete请求一般会返回3种状态码:

    200 (OK) - 删除成功,同时返回已经删除的资源

    202 (Accepted) - 删除请求已经接受,但没有被立即执行(资源也许已经被转移到了待删除区域)

    204 (No Content) - 删除请求已经被执行,但是没有返回资源(也许是请求删除不存在的资源造成的)

    5.put

    上传指定URL的描述

    put方法跟Post相似,但不常用。

    根本区别:

    POST请求后,URL后续处理与请求前再无联系,可以重定向指定资源。

    PUT请求后,会反馈状态码,且不会重定向指定资源。

    6.options

    返回服务器支持的HTTP方法。

    OPTIONS请求方法的主要用途有两个:

    1、获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。

    2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。

    7.trace

    支持该方式的服务器存在跨站脚本漏洞,通常在描述各种浏览器缺陷的时候,把"Cross-Site-Tracing"简称为XST。

    攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息。

    URL: XXX

    漏洞等级: 提示

    威胁类型: TRACE Method Enabled

    可能导致: 启用TRACE方法存在如下风险:

    1、恶意攻击者可以通过TRACE方法返回的信息了解到网站前端的某些信息,如果缓存服务器等,从而为进一步的攻击提供便利;

    2、恶意攻击者可以通过TRACE方法进行XSS攻击,盗取会话cookie、获取账户、模拟其他用户身份,甚至可以修改网页呈现给其他用户的内容,从而给用户带来损失;

    3、即使网站对关键页面启用了HttpOnly头标记,禁止脚本读取cookie信息时,通过使用Trace方法,恶意攻击者可以绕过这个限制,读取cookie信息。

    描述: 目标WEB服务器启用了TRACE方法。

    TRACE方法是HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的代理服务器的信息),由于该方法原样返回客户端提交的任意数据,因此,可用来进行跨站脚本(XSS)攻击,这种攻击方式又称为跨站跟踪攻击(XST)。

    建议: 如非必要,请禁用TRACE方法。

    解决方案:

    1)2.0.55以上版本的Apache服务器,可以在httpd.conf的尾部添加:

    TraceEnable off

    2)如果你使用的是Apache

    -  确认rewrite模块激活(httpd.conf,下面一行前面没有#):

    LoadModule rewrite_module modules/mod_rewrite.so

    - 在各虚拟主机的配置文件里添加如下语句:

    RewriteEngine On

    RewriteCond %{REQUEST_METHOD} ^TRACE

    RewriteRule .* – [F]

    注:可以在httpd.conf里搜索VirtualHost确定虚拟主机的配置文件。

    trace的攻击方法,在网上没有找到多少。找到了trace 方法

    traceroute

    Version 1.4a12+Darwin

    Usage: traceroute [-adDeFInrSvx] [-A as_server] [-f first_ttl] [-g gateway] [-i iface]

    [-M first_ttl] [-m max_ttl] [-p port] [-P proto] [-q nqueries] [-s src_addr]

    [-t tos] [-w waittime] [-z pausemsecs] host [packetlen]

    详情请看traceroute使用

    8.connect

    转换为透明TCP/IP隧道的连接请求。

    CONNECT与GET等的不同之处就在于代理服务器对CONNECT连接处理为建立一个到目标服务器的连接而不把CONNECT请求发送出去,建立连接以后代理服务器不会对连接数据作任何修改,只是转发

    三、COOKIE和SESSION

    作者:知乎用户

    链接:https://www.zhihu.com/question/19786827/answer/28752144

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。

    2. 思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

    3. Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。

    所以,总结一下:

    Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

    Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

    具体分析,请看知乎的一些观点。

    相关文章

      网友评论

        本文标题:HTTP协议

        本文链接:https://www.haomeiwen.com/subject/infqnxtx.html