【web安全深度剖析笔记】HTTP协议解析

HTTP协议解析

HTTP即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HTML文档从web服务器传输到web浏览器。

HTTP和HTTPS的区别

https协议需要到ca申请证书,需要一定费用
http是超文本传输协议,消息是明文传输,https则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的链接方式,用的端口也不一样,HTTP是80,https是443
HTTP的链接很简单,是无状态的;https协议是由ssl+HTTP协议构建的可进行加密传输、身份 认证的网络协议,比HTTP更加安全

HTTP协议详解

HTTP是一种无状态的协议,无状态是指web浏览器与web服务器之间不需要建立持久的链接,这意味着当一个客户端发送请求,然后web服务器返回响应(response),链接就被关闭了,在服务端不保留链接的有关信息,HTTP请求只能由客户端发起,而服务端不能主动向客户端发送数据。
1.HTTP请求与相应
HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)、和请求正文。

POST /login.php HTTP/1.1       //请求行
HOST:www.baidu.com            //请求头
User-Agent:Mozilla/5.0(Windows NT 6.1; rv:15.0)Gecoko/20100101 Firefox/15.0    
                               //空白行,代表请求头结束
Username=admin&password=admin    //请求正文

HTTP请求行的第一行即为请求行,请求行由三部分组成,该行的第一部分说明了该请求是post请求;该行的第二部分是一个斜杠(/login.php),用来说明请求的是域名根目录下的login.php;最后一部分说明使用的HTTP版本。
第二行至空白行为HTTP中的请求头(消息头)。host代表的主机地址,user-agent代表电脑标识。
HTTP请求的最后一行为请求正文,请求正文是可选的,常出现在post方法中
2.HTTP响应
HTTP响应也由三部分组成,分别是响应行,响应头(消息报头)和响应正文(消息主题)

HTTP/1.1 200 OK             //响应行
Date:Thu,28 Feb 2013 07:36:47 GMT    //响应头
//空白行,代表响应头结束

Index.html        //响应正文或者叫消息主题

响应行存在HTTP版本,状态吗以及消息。
消息报头是响应正文,是服务器向客户端发送的HTML数据。

HTTP请求方法

1.GET
GET方法用于获取请求页面的指定信息(以实体的格式)。如果请求资源为动态脚本(非HTML),那么返回文本是web容器解析后的HTML源代码,而不是源文件。
2.HEAD
HEAD方法除了服务器不能在响应里返回消息主体外,其他都与GET方法相同。此方法经常被用来测试超文本链接的有效性、可访问性和最近的改变。
3.POST
POST方法也与GET方法相似,但最大的区别在于,GET方法没有请求内容,而POST是有请求内容的。POST请求最多用于向服务器发送大量的数据,安全性相对高一点。
4.PUT
PUT方法用于请求服务器把请求的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将用此请求中的数据替换原先的数据,作为指定资源的最新修改版,如果请求指定的资源不存在,将会创建这个资源,且数据请求正文。属于危险方法之一。
5.DELETE
DELETE方法用于请求源服务器删除请求的指定资源。服务器一般都会关闭此方法,因为客户端可以进行删除文件操作,属于危险方法之一。
6.TRACE
TRACE方法被用来激发一个远程的应用层的请求消息回路,也就是说,回显服务器收到的请求。TRACE方法允许客户端去了解数据被请求的另一端接收的情况,并且利用哪些数据信息去测试或诊断。
7.CONNECT
此方法用于能动态切换到隧道的代理。
8.OPTIONS
OPTIONS方法是用于请求获取得URL标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

参考链接:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

3.HTTP状态码

1xx:信息提示,表示请求已被成功接收,继续处理。范围100~101。
2xx:成功,服务器成功处理了请求。范围200~206。
3xx:重定向,重定向状态码用于告诉浏览器客户端,它们访问的资源已被移动,并告诉客户端新的资源地址位置。这时,浏览器将重新对新资源发起请求。范围300~305.
4xx:客户端错误状态码,有时客户端会发送一些服务器无法处理的东西,比如格式错误的请求,或者最常见的是,请求一个不存在的URL。范围400~415.
5xx:有时候客户端发送了一条有效请求,但web服务器自身出错了,可能是web服务器运行出错了,或者网站都挂了。5XX就是来描述服务器内部错误的。范围500~505.

常见的状态吗描述
200:客户端请求成功,是最常见的状态
302:重定向
404:请求资源不存在,是最常见的状态
400:客户端请求 有语法错误,不能被服务器所理解
401:请求未经授权
403:服务器收到请求,但是拒绝提供服务
500:服务器内部错误,是最常见的状态
503:服务器当前不能处理客户端的请求,一段时间后可能回复正常

4.HTTP消息

HTTP消息又称为HTTP头,由四部分组成,分别是请求头、响应头、普通头和实体头。
1.请求头
请求头只出现在HTTP请求中,请求报头允许客户端向服务器端传递请求的附加信息和客户端自身的信息。
1)Host
Host请求报头主要用于指定被请求资源的Internet主机和端口号,
2)user-agent
user-agent请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。
3}Referer
Referer包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本页面。
4)cookie
cookie是非常重要的请求头,它是一段文字,常用来表示请求者的身份。
5)Range
Range可以请求实体的部分内容,多线程下载一定会用到此请求头。
6)x-forward-for
x-forward-for即XXF头,它代表请求端的IP,可以有多个,中间以逗号隔开。
7)accept
accept请求报头域用于指定客户端接收哪些MIME类型的信息,如accept:text/html,表明客户端希望接收HTML文本。
8)accept-charset
accept-charset请求报头域用于指定客户端接收的字符集。如果在请求消息中没有设置这个域,默认是任何字符集都可以接收。

2.响应头
响应头是服务器根据请求向客户端发送的HTTP头
1)server
服务器所使用的web服务器名称,如service:apache/1.3.6(union),攻击者通过查看此头,可以探测web服务器名称。所以,建议在服务器端进行修改此头的信息。
2)set-cookie
向客户端设置cookie,通过查看此头,可以清楚地看到服务器向客户端发送的cookie信息
3)last-modified
服务器通过这个头告诉浏览器,资源的最后修改时间。
4)location
服务器通过这个头告诉浏览器去访问那个页面,浏览器接收到这个请求之后,通常会立刻访问location头所指向的页面。这个头通常是配合302状态码使用
5)refresh
服务器通过refiresh头告诉浏览器定时刷新浏览器。

3.普通头

在普通报头中,有少数报头域由于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

4.实体头

请求和响应消息都可以传送一个实体头。实体头定义了关于实体正文和请求所标识的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。
1)content-type
content-type实体头用于向接收实体的介质类型。
2)content-encoding
content-encoding头被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得content-type报头中所引用的媒体类型,必须采用相应的解码机制。
3)content-length
content-length实体报头用于指明实体正文的长度,以字节方式存储的十进制数来表示。
4)last-modified
last-modified实体报头用于指示资源的最后修改日期和时间。

你可能感兴趣的:(笔记,http,web安全,https)