http协议的最新版本是1.1。是一种无状态协议。javascript
无状态协议是指web浏览器与web服务器之间不须要创建持久连接。当客户端向服务器端发送请求(Request)时,服务器响应客户端的请求(Response),连接就被关闭了,在服务器端不保留连接的有关信息。也就是说http请求只能由客户端发起服务器端不能主动向客户端发送数据。php
不知道你们有没看过《记忆碎片》,这部电影里面的男主角患了罕见的短时间记忆丧失症,也就是同一我的,上次一块儿打过招呼,下次赶上了也不认识。可是他借助于纸跟笔,以及身上的纹身让他去记住一些东西。这比如在咱们web开发中的cookie
及session
。就是由于http得了脸盲症cookie
和session
才会应运而生。html
http遵循请求(Request)/应答(Response)模型java
POST /login.php HTTP/1.1 //请求行 HOST: www.jiejieyh.cn //请求头 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 //空白行,表明请求头结束 Username=admin&password=12345 //请求正文
HTTP请求的第一行即为请求行,请求行有三部分组成web
第一部分说明了该请求是POST请求json
第二部分说明请求的是该域名根目录下的login.php浏览器
第三部分说明使用的HTTP协议版本安全
第二行至空白行为HTTP中的请求头服务器
HOST表明请求的主机地址cookie
User-Agent 表明浏览器标识
请求头由客户端自行设定
HTTP请求的最后一行为请求正文,请求正文是可选的。最常出如今POST请求方法中。
HTTP/1.1 200 OK Date: Wed, 23 Nov 2016 10:18:00 GMT Content-Type: text/html; charset=utf-8 Content-Length: 83 Connection: keep-alive Server: Apache X-Powered-By: PHP/7.0.7 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Authorization, origin, X-Requested-With, Content-Type, XMLHttpRequest,request-id Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS //空白行表明相应头结束 <!DOCTYPE html> <html lang="zh-CN"> <head> //响应正文或者叫消息主题 <meta charset="utf-8"> ...
HTTP响应的第一行为响应行,其中有HTTP版本,状态码、以及消息“OK”
第二行至末尾空白行为响应头,由服务器向客户端发送。
响应头以后是响应正文,服务器向客户端发送的数据
GET方法用于获取请求页面的指定信息(以实体的格式)
GET /index.php?id=1 HTTP/1.1 HOST: www.jiejieyh.cn
使用HEAD方法服务器不能在响应里返回消息主体,其它与GET相同。此方法经常使用来测试超文本的有效性、可访问性和最近的改变。
攻击者编写扫描工具时,经常使用此方法,由于只测试资源是否存在,而不用返回消息主体。速度必定是最快的
HEAD /index.php HTTP/1.1 HOST: www.jiejieyh.cn
POST方法与GET方法类似,最大的区别在于GET方法没有请求内容,而POST是有请求内容的。
POST请求最多用于向服务器发送大量的数据。GET虽然也能发送数据,可是有长度限制。
GET请求将发送的数据显式在浏览器端,而POST则不会。安全性相对对对对高一点...
POST /interface/login.php HTTP/1.1 Host: www.jiejieyh.cn Connection: keep-alive Content-Length: 63 Accept: application/json, text/javascript, */*; q=0.01 Origin: http://www.jiejieyh.cn X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Referer: http://www.jiejieyh.cn/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8 act=kol&userName=admin&passWord=123456&vcode=9614&autoLogin=0
PUT方法用于请求服务器把请求中的实体存储在请求资源下,若是请求资源已经在服务器中存在则覆盖,不存在将会建立这个资源。数据为请求正文
PUT /input.txt HOST:www.jiejieyh.cn 12346
这段HTTP PUT请求将会在主机根目录下建立input.txt,内容为123456。不用想,一般状况下经过请求写入文件,服务器都会禁止的。
DELETE 方法用于请求源服务器删除指定的资源,服务器一搬会关闭此方法。
TRACE方法用于激发一个远程的应用层的请求消息回路。也就是说回显服务器收到的请求。TRACE方法容许客户端去了解数据被请求链的另外一端接收的状况,而且利用那些数据信息去测试或诊断,此方法很是少见。
HTTP 1.1协议规范保留了CONNECT方法,用于能动态切换到隧道的代理。
OPTIONS方法是用于请求得到由URL标识的资源在请求/响应的通讯过程当中可使用的功能选项。经过这个方法,客户端能够在采起具体资源请求以前,决定对该资源采起何种必要措施。或者了解服务器的性能。
OPTIONS / HTTP/1.1 HOST:www.jiejieyh.cn HTTP/1.1 200 OK Allow:OPTIONS,TRACE,GET,HEAD,POST Server:Microsoft-IIs/7.5 Public:OPTIONS,TRACE,GET,HEAD,POST X-Powerd-By:ASP.NET Content-Length:0
客户端发出请求后,服务器接收处理完成后会 向客户端发送响应信息,其中Http响应中的第一行中,最重要的一点就是Http的状态码
HTTP/1.1 200 ok
此时的状态码为200,在Http协议中表示请求成功
Http的状态码由3位数字组成,第一位数字定义了响应的类别且有只有如下5种:
1xx:信息提示,表示请求已经被成功接收,继续处理。范围100-101
2xx:成功,服务器成功的处理了请求,范围200-206
3xx:重定向,重定向状态码用于告诉浏览器客户端,它们访问的资源已被移动,并告诉客户端新的资源地址位置。这时浏览器将从新对新资源发起请求。范围300-305
4xx:客户端错误码,有时候客户端会发送一些服务器没法处理的东西,好比格式错误的请求,请求一个不存在的url...其范围是400-415
5xx:客户端发送的请求有效,服务器自身出错了,5xx就是用来描述服务器内部错误的,范围500-505
200:客户端请求成功
302:重定向
404:请求的资源不存在
401:请求未经受权
500:服务器内部错误
503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Http消息称为Http头,由4部分组成 请求头、响应头、普通头、实体头。
请求头只出如今Http请求中,请求报头容许客户端向服务器传递请求的附加信息和客户端自身的信息。
Host:主要用于指定被请求的Internet主机和端口号 HOST:www.jiejieyh.cn:801
User-Agent:请求报头域容许客户端将它的操做系统、浏览器和其它属性告诉服务器 User-Agent:My privacy
Referer:Referer包含一个URL,表明当前访问的URL的上一个URL,也就是说用户是从什么地方来到本页面。
Referer:www.jiejieyh.cn/register.php
Cookie:Cookie是很是重要的请求头,它是一段文本,经常使用来表示请求者的身份等。
Range能够请求实体的部份内容,多线程下载必定会用到此请求头。例如:
表示头500个字节:bytes=0~499
表示第二个500字节:bytes=500~999
表示最后500字节:bytes=-500
表示500字节之后的范围:bytes=500-
x-forward-for:即XXF头,它表明请求端的IP,能够有多个,中间以逗号隔开
Accept:用于指定客户端接收那些MIME类型的信息,如Accept:text/html,代表客户端但愿接收HTML文本。
Accept-Charset:用于指定客户端接收的字符集例如:Accept-Charset:utf-8,gb2312。若是在请求消息中没有设置这个域,默认是任何字符集均可以接收。
Server:服务器所使用的Web服务器名称,如Server:Apache/1.3.6(Unix),攻击者能够经过此头探测Web服务器名称。建议在服务器端进行修改此头的信息
Set-Cookie:向客户端设置Cookie,经过查看此头能够清楚地看到服务器向客户端发送的Cookie信息
Last-Modified:服务器经过这个头告诉浏览器,资源最后修改时间
Location:服务器经过这个头告诉浏览器去访问哪一个页面,浏览器接收到这个响应以后,一般会马上访问Location头所指向的页面。这个头一般配合302状态码使用。
Refresh:服务器经过Refresh头告诉浏览器定时刷新浏览器
请求和响应消息均可以传送一个实体头。实体头定义了关于实体正文和请求所标识的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。
Content-Type:用于向接收方指定实体的介质类型。
Content-Encoding:用做媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,于是要得到Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。
Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
Last-Modified:用于指示资源的最后修改日期和时间。