一、什么是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的一种方式。
具体分析,请看知乎的一些观点。
网友评论