无状态Http协议。http协议的最新版本是1.1。它是一个无状态的协议。什么是无状态协议?无状态协议意味着无需在Web浏览器和Web服务器之间建立持久链接。当客户端向服务器发送请求(Request),服务器响应客户端的请求(Response)时,连接关闭,服务器上不保留任何连接信息。也就是说,http请求只能由客户端发起,服务端不能主动向客户端发送数据。不知道大家有没有看过《记忆碎片》,这部电影里的主人公患有一种罕见的短期失忆症,就是同一个人,上次打招呼,下次就认不出来了。但是借助纸和铅笔,以及身上的纹身,他有一些东西要记住。这就好比我们web开发中的cookies和session。正是因为http有脸盲症,cookies和session应运而生。http请求和响应http遵循请求(Request)/响应(Response)模型HTTP请求POST/login.phpHTTP/1.1//请求行HOST:www.jiejieyh.cn//请求头User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/53.0.2785.116Safari/537.36//空行,代表请求头结束Username=admin&password=12345//请求文本请求的第一行lineHTTPrequestis请求行由三部分组成。第一部分表示该请求是POST请求。第二部分表示请求的是域名根目录下的login.php。第三部分表示所使用的HTTP协议的版本。请求头的第二行是空白的。HTTP中的请求头HOST表示请求的主机地址User-Agent表示浏览器标识请求头由客户端自己设置请求文本是HTTP请求的最后一行,请求文本是可选的。最常出现在POST请求方法中。HTTP响应HTTP/1.1200OKDate:Wed,23Nov201610:18:00GMTContent-Type:text/html;charset=utf-8Content-Length:83Connection:keep-aliveServer:ApacheX-Powered-By:PHP/7.0.7Expires:1981年11月19日星期四08:52:00GMTCache-Control:无存储,无缓存,必须重新验证Pragma:no-cacheVary:Accept-EncodingContent-Encoding:gzipAccess-Control-Allow-Origin:*Access-Control-Allow-Headers:Authorization,origin,X-Requested-With,Content-Type,XMLHttpRequest,request-idAccess-Control-Allow-Methods:POST,GET,PUT,DELETE,OPTIONS//空行代表结束相应的标题//响应文本或消息主题...ResponselineHTTP响应的第一行是响应行,其中包含HTTP版本、状态码、消息“OK”响应头是从第二行到空行末尾的响应头,由服务器发送给客户端。响应文本响应头后面是响应文本,服务器发送给客户端的数据HTTP请求方法GETGET方法用于获取请求页面的指定信息(实体格式)GET/index.php?id=1HTTP/1.1HOST:www.jiejieyh.cnHEAD使用的是HEAD方式。服务器无法在响应中返回消息正文。其他同GET。此方法通常用于测试超文本的有效性、可访问性和最近的更改。攻击者在编写扫描工具时经常使用这种方法,因为他们只检测资源是否存在,而不会返回消息体。速度肯定是最快的HEAD/index.phpHTTP/1.1HOST:www.jiejieyh.cnPOST方法与GET方法类似,最大的区别是GET方法没有请求内容,而POST方法有请求内容。POST请求最多用于向服务器发送大量数据。GET虽然也可以发送数据,但是有长度限制。GET请求将在浏览器端显式发送数据,而POST则不会。安全性相对较高...POST/interface/login.phpHTTP/1.1Host:www.jiejieyh.cnConnection:keep-aliveContent-Length:63Accept:application/json,text/javascript,*/*;q=0.01来源:http://www.jiejieyh.cnX-Requested-With:XMLHttpRequestUser-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/53.0.2785.116Safari/537.36内容类型:application/x-www-form-urlencoded;charset=UTF-8Referer:http://www.jiejieyh.cn/Accept-Encoding:gzip,deflateAccept-Language:zh-CN,zh;q=0.8act=使用了kol&userName=admin&passWord=123456&vcode=9614&autoLogin=0PUTPUT方法请求服务器将请求中的实体存储在请求的资源下。如果请求的资源已经存在于服务器中,它将被覆盖。如果不存在,将创建资源。数据是请求文本PUT/input.txtHOST:www.jiejieyh.cn12346这个HTTPPUT请求会在宿主机的根目录下创建input.txt,内容是123456。别想了,一般服务器都会禁止写入文件的请求。DELETEDELETE方法用于请求源服务器删除指定的资源,服务器一旦移动就会关闭该方法。TRACETRACE方法用于触发远程应用层请求消息循环。即回显服务器收到的请求。TRACE方法允许客户端了解请求链的另一端接收到的数据,并使用该数据信息进行测试或诊断。这种方法非常少见。CONNECTHTTP1.1协议规范为可以动态切换到隧道的代理保留了CONNECT方法。OPTIONSOPTIONS方法用于请求在请求/响应通信期间可用于由URL标识的资源的功能选项。通过此方法,客户端可以在发出特定资源请求之前决定对该资源采取哪些必要的操作。或者了解服务器性能。OPTIONS/HTTP/1.1HOST:www.jiejieyh.cnHTTP/1.1200OKAllow:OPTIONS,TRACE,GET,HEAD,POSTServer:Microsoft-IIs/7.5Public:OPTIONS,TRACE,GET,HEAD,POSTX-Powered-By:ASP.NETContent-Length:0Http状态码客户端发送请求后,服务端接收并处理后向客户端发送响应报文。Http响应第一行最重要的一点是Http状态码HTTP/1.1200ok此时的状态码是200。在Http协议中,Http状态码由3位数字组成,第一位数字定义response的类型,只有以下5种:1xx:信息提示,表示请求已被接受Receivedsuccessful,continueprocessing.Range100-1012xx:success,服务器成功处理了请求,range200-2063xx:重定向,重定向状态码用于告诉浏览器客户端他们访问的资源已经被移动,并告诉客户端新的资源地址Location.这时候浏览器就会对新的资源发起新的请求。Range300-3054xx:clienterrorcode,有时候客户端会发送一些服务器无法处理的东西,比如格式错误的请求,请求一个不存在的url...范围是400-4155xx:客户端发送的请求有效,服务器本身有错误,5xx用于描述服务器内部错误,范围为500-505常见状态码200:客户端请求成功302:重定向404:请求的资源不存在401:请求中isunauthorized500:Serverinternalerror503:服务器目前无法处理客户端的请求,过一段时间可能会恢复正常。Http消息Http消息称为HttpHeaders,它由4部分组成:请求头、响应头、公共头和实体头。请求头请求头只出现在Http请求中,请求头允许客户端向服务器传递请求的附加信息和客户端自身的信息。常用的Http请求头Host:主要用于指定请求的Internet主机和端口号HOST:www.jiejieyh.cn:801User-Agent:请求头字段让客户端告诉服务器自己的操作系统、浏览器等属性User-Agent:MyprivacyReferer:Referer包含一个URL,代表当前访问的URL的前一个URL,也就是说用户是从哪里来到这个页面的。Referer:www.jiejieyh.cn/register.phpCookie:Cookie是一个非常重要的请求头。它是一段文字,常用于表明请求者的身份。Range可以请求实体的部分内容,多线程下载必须使用这个请求头。例如:表示前500个字节:bytes=0~499表示后500个字节:bytes=500~999表示后500个字节:bytes=-500表示500个字节之后的范围:bytes=500-x-forward-for:XXF头,代表请求端的IP,可以有多个,用逗号隔开HTML文本。Accept-Charset:用于指定客户端接收到的字符集。例如:接受字符集:utf-8、gb2312。如果请求报文中没有设置该字段,则默认为任何字符集都可以接收。ResponseheaderServer:服务器使用的Web服务器的名称,如Server:Apache/1.3.6(Unix),攻击者可以通过这个header检测到Web服务器的名称。建议在服务端修改这个header的信息。Set-Cookie:给客户端设置Cookie。通过查看这个header,可以清楚的看到服务器发送给客户端的Cookie信息。Last-Modified:服务器通过这个header告诉浏览器该资源LastmodifiedtimeLocation:服务器通过这个header告诉浏览器访问哪个页面。浏览器收到此响应后,通常会立即访问Location标头指向的页面。此标头通常与302状态代码一起使用。Refresh:服务器通过Refreshheader告诉浏览器定期刷新浏览器实体header。请求和响应消息都可以传输实体标头。实体标头定义有关实体文字和请求标识的资源的元信息。元信息是实体内容的属性,包括实体信息的类型、长度、压缩方式、最后修改时间等。Content-Type:用于向接收者指定实体的媒体类型。Content-Encoding:用作媒体类型修饰符,其值表示已对实体文本应用的附加内容编码,因此要获得Content-Type头字段中引用的媒体类型,必须使用相应的解码机制。Content-Length:用于表示实体文本的长度,以十进制数表示,以字节为单位存储。Last-Modified:用于表示资源的最后修改日期和时间。