1. 什么是http 协议:
客户端连上web 服务器后,若想获得web 服务器中的某个web资源,需遵守一定的通讯格式,HTTP 协议用于定义客户端与 WEB服务器通讯的格式。它是TCP/IP协议的一个应用层(工作在TCP/IP)协议。(w3c) 用于定义WEB浏览器与WEB服务器之间交换数据的过程。
2. HTTP协议的版本:HTTP/1.0 HTTP/1.1
他们的区别:
1.0 每访问一次都创建一次连接。
1.1 创建一次连接可以有多次请求。
·在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源
·HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源
面试题:
一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求?
答:四次:
第一次,获取html 页面源码;
后三次,浏览器解析源码,向服务器发送三次请求。
WEB应用设计原则:
尽量减少,客户端向服务器发送请求的次数,减少服务器的压力。
HTTP : 协议请求:
客户端连上服务器后,向服务器请求某个WEB资源,称之为客户端向服务器发送了一个HTTP请求,一个完整的HTTP请求包括如下内容:
一个请求行,若干请求头, 以及实体内容。
GET /books/Java.html HTTP/1.1 ——> 请求行——用于描述客户端的请求方式,请求的资源名称,以及使用的HTTP 协议版本号。
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host : localhost
Referer:http:// localhost/links.asp
User-Agent: Mozilla/4.0
Accept-Encoding : gzip , deflate
多个请求头:请求头用于描述客户端请求哪台主机,以及客户端的一些环境信息等。
一个空行
请求行:
请求行中的GET称之为请求方式,请求方式有:
POST GET HEAD OPTIONS DELETE TRACE PUT
常用的有:GET POST
用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输入地址访问,点超链接访问等都是get , 用户如想把请求方式该为post,可通过更改表单的提交方式实现。
·如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:由于附在url地址后面,数据大小不能超过1K。
·如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,例如:
POST /servlet/ParamsServlet HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
name=abc&password=xyz
Post方式的特点:传送的数据量无限制。
HTTP 请求头的细节——消息头:
用于HTTP请求中的常用消息头
Accept: text/html,image/*
Accept-Charset: ISO-8859-1
Accept-Encoding: gzip,compress
Accept-Language: en-us,zh-cn
Host: www.it315.org:80
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT
Referer: http://www.it315.org/index.jsp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
第一行:客户机告诉服务器 自己支持的类型。
如果是:Accept:*/* 我什么都支持。
第二行:Accept-Charset: ISO-8859-1
用于告诉服务器,客户机采用的编码。
第三行:Accept-Encoding: gzip,compress
用于告诉服务器,客户机支持的压缩格式。
第四行:Accept-Language: en-us,zh-cn
客户机的语言环境。
第五行:Host: www.nihao.org:80
客户机通过这个头告诉服务器,想访问的主机名。
第六行:If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT
客户机通过这个头告诉服务器,资源的缓存时间
第七行:Referer: http://www.nihao.org/index.jsp (防盗链)
告诉服务器,从哪个资源访问服务器。
第八行:User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
告诉服务器,自己的软件环境
第九行:Cookie
客户机通过这个头可以向服务器带数据
第十行:Connection: close/Keep-Alive
请求完后是否保持连接。
第十一行:Date: Tue, 11 Jul 2000 18:23:51 GMT
HTTP 响应:
一个HTTP响应代表服务器向客户端回送的数据,包括:
一个状态行,若干消息头,以及实体内容。
服务器向浏览器回送数据时,会通过响应消息头通知浏览器 进行何种操作。
HTTP请求中的常用响应头
1. Location: http://www.nihao.org/index.jsp
a) 这个头配合302状态码使用,用于告诉客户找谁
2. Server:apache tomcat
a) 服务器通过这个头,告诉浏览器服务器的类型
3. Content-Encoding: gzip
a) 服务器通过这个头,告诉浏览器数据的压缩格式
如何是实现数据的压缩:
4 Content-Length: 80
服务器通过这个头,告诉浏览器回送数据的长度
5. Content-Language: zh-cn
a) 回送语言环境
6. Content-Type: text/html; charset=GB2312
a) 服务器通过这个头,告诉浏览器回送数据类型
7. Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
a) 服务器通过这个头,告诉浏览器当前资源缓存时间
8. Refresh: 1;url=http://www.it315.org
a) 服务器通过这个头,告诉浏览器隔多长时间刷新一次
9 Content-Disposition: attachment; filename=aaa.zip
服务器通过这个头,以下载方式打开这个头
10 Set-Cookie:SS=Q0=5Lb_nQ; path=/search
11 Transfer-Encoding : 服务器通过这个头,告诉浏览器数据传送格式。
12 ETag : 缓存相关的头 ,可以做到实时更新!
13 Expires: -1//3种禁止缓存的头字段
控制浏览器数据的缓存多长时间 -1或0 不缓存,
14 Cache-Control: no-cache
Pragma: no-cache
服务器通过这两个头,控制浏览器不要缓存
【禁用浏览器缓存(考虑不同浏览器兼容性,存在三个字段)】
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
404 ——请求的资源在服务器中没有
403—— 没有权限,服务器有资源,拒绝访问
302—— 请你去找别人
304 307 —— 请你去拿缓存
500 —— 服务器出问题
HTTP 请求字段:
·Range 头指示服务器只传输一部分Web资源。这个头可以用来实现断点续传功能。Range 字段可以通过三种格式 设置要传输的字节范围:
·Range : bytes = 1000 - 2000
传输范围从1000 到 2000 字节。
Range : bytes = 1000-
传输Web资源中第1000个字节以后的所有内容
Range bytes = 1000
传输最后1000 个字节
转自:http://blog.csdn.net/cxx00/article/details/60467230