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