http协议
一、什么是http协议
Hyper Text Transfer Protocol(超文本传输协议)简称HTTP协议,它是TCP/IP协议在应用层的一个协议,其主要有两个版本HTTP/1.0、HTTP/1.1。
二、http协议的特点
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
三、http请求和响应
http请求:
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。如下所示:
1、请求行
请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有:POST、GET
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上,客户端通过这两种方式都可以带一些数据给服务器:
1)如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量不能超过1K。另一方面,一些用户密码等保密数据不适合以GET方式提交。
2)如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,例如:
POST /servlet/ParamsServlet HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
name=abc&password=xyz
Post方式的特点:传送的数据量无限制。
2、请求头
常用请求头详解:
Accept:用于告诉服务器,客户支持的数据类型。
Accept-Charset:用于告诉服务器,客户采用的编码。
Accept-Encoding:用于告诉服务器,客户支持的数据压缩格式。
Host:客户机通过这个头告诉服务器,想访问的主机名。
If-Modified-Since:用于告诉服务器,资源缓存的时间。
Referer:用于告诉服务器,它是从哪个资源来访问服务器的(防盗链)。
Content-Type:告知服务器,请求正文的MIME类型
默认类型:application/x-www-form-urlencoded(表单enctype属性的默认取值)
具体体现:username=abc&password=123
其他类型:multipart/form-data(文件上传时用的)
User-Agent:用于告诉服务器,客户机使用的软件环境。
Cookie:客户带过来的cookie信息。
Connection:表示是否持续连接。如果想本次请求后关闭连接,使用close;如果想持续连接,使用keep-Alive。
Date:发送请求时间。
http响应:
一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
1、状态行
状态行
格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
HTTP请求中的常用响应头:
Location: http://www.it315.org/index.jsp
Server:apache tomcat
Content-Encoding: gzip
Content-Length: 80
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
Refresh: 1;url=http://www.it315.org
Content-Disposition: attachment; filename=aaa.zip
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
常用响应头详解:
Location:这个头配合302状态码使用,用于告诉客户找谁。
Server:服务器通过这个头,告诉浏览器服务器的类型。
Content-Encoding:服务器数据压缩格式。
Content-Length:告诉浏览器回送数据的长度。
Content-Type:告诉浏览器客户端,响应文正的MIME类型。默认text/html
Last-Modified:告诉浏览器当前资源缓存的时间。
Refresh:告诉浏览器多长时间刷新一次。
Content-Disposition:告诉浏览器以下载方式打开数据。
Expires: 告诉浏览器把回送的资源缓存多长时间。-1或0则表示不缓存。
Cache-Control: 通过这个头也是告诉浏览器不要缓存数据。http1.1有效
Pragma: 通过这个头也是告诉浏览器不要缓存数据。http1.0有效
通用信息头指既能用于请求,又能用于响应的一些消息头。
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT