浅析HTTP协议
HTTP(超文本传输协议)协议是一种无状态的协议。无状态是指web浏览器与web服务器之间不需要建立持久的连接。
HTTP遵循请求(request)和应答(response)模型,web浏览器向web服务器发送请求时,web服务器处理请求并返回应答。
HTTP请求
HTTP请求有三部分组成:
1.请求行(请求方法)
2.请求头(消息报头)
3.请求正文
例如:
POST /sample.php HTTP/1.1 //请求行:请求方法+URI+协议/版本
Host: www.xxxxx.com //请求头
User-Agent: Mozila/4.0(compatible; MSIE5.01;Windows NT5.0)
//空白行,代表请求头结束
username=admin&password=1234 //请求正文
HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。最常用的方法是GET和POST。
GET方法:
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只是经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。
例如HTTP://127.0.0.1/login.jsp?Name=admin&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以看出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大。
POST方法:
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
HTTP响应
HTTP响应也由3个部分构成:
1.响应行
2.响应头
3.响应正文
例如:
HTTP/1.1 200 OK //响应行:协议/版本+状态码
Server:Apache Tomcat/5.0.12 //响应头
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
//空白行,代表响应头结束
<html> //响应正文
<head><title> HTTP响应示例 </title></head>
……
HTTP状态码
它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成,其中首位数字定义了应答码的类型。且只有以下5种:
1XX:信息类(Information),表示收到Web浏览器请求,正在进一步的处理中。范围为100-101
2XX:成功类(Successful),表示用户请求被正确接收,理解和处理。范围为200-206
3XX:重定向类(Redirection),表示请求资源已被移动,并告知客户端新的资源地址位置,这时,浏览器将重新对资源发起申请。范围为300-305
4XX:客户端错误(Client Error),表示客户端提交的请求有错误.范围为400-415
5XX:服务器错(Server Error)表示服务器自身出错。范围为500-505
HTTP消息
HTTP消息又称为HTTP头,有四种类型:
1.请求头
2.响应头
3.普通头
4.实体头
请求头主要有:
Host:用于指定被请求资源的Internet主机和端口号。
User-Agent:将客户端的操作系统、浏览器和其他属性告诉服务器。
Referer:代表访问URL的上一个URL,也就是说,用户从什么地方来到本页面。
Cookie:用来表示请求者的身份。
Range:用于请求实体的部分内容。
Accept:用于指定客户端接收哪些类型的信息。
Accept-Charset:用于指定客户端接收的字符集。
X-forward-for:即XFF,代表请求端的IP。
响应头主要有:
Server:服务器所使用的web服务器和web容器名称。
Set-Cookie:向客户端设置cookie。
Last-Modified:资源的最后修改时间。
Location:告诉浏览器去访问哪个页面,通常配合302状态码使用。
Refresh:告诉浏览器定时刷新。
普通头:Date、Connection、Cache-Control
实体头主要有:
Content-Type:向接收方指示实体的介质类型。
Content-Encoding:指示已经被应用到实体正文的附加内容的编码。
Content-Length:指明实体正文长度,以字节方式存储的十进制表示。
HTTPS
HTTPS和HTTP的区别:
1.HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
2.HTTP是超文本传输协议,信息是明文传输,HTTPs 则是具有安全性的ssl加密传输协议。
3.HTTP和HTTPS使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
4.HTTP的连接很简单,是无状态的。
5.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比HTTP协议安全。