笔记摘要:
作为web开发的前奏,这里介绍了什么是HTTP协议,HTTP请求与HTTP响应信息的介绍
一、什么是HTTP协议
客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。
HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
二、HTTP协议简介
HTTP使用请求-响应的方式进行传输,一个请求对应一个响应,并且请求只能是由客户端发起的。
HTTP协议的版本:HTTP/1.0、HTTP/1.1
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
三、HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
一个请求行、若干请求头、以及实体内容,如下所示 :
HTTP请求行
请求方式详细介绍(1)请求行:GET /books/java.html HTTP/1.1(请求方式 请求资源 所用协议)
(2)请求方式:GET、POST,默认情况下浏览器都是get方式的请求,只用表单的method设置为POST才是post请求
请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT常用的有: GET、 POST
用户如没有设置,默认情况下浏览器向服务器发送的都是GET请求,例如在浏览器直接输地址访问,点超链接访问等都是GET,用户如想把请求方式改为POST,可通过更改表单的提交方式实现。
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
Get和post方式的区别:
HTTP请求的细节——常见请求头Get:会将提交的数据显示在地址栏上。
Post:不会将数据显示在地址栏上
Get:提交数据的体积受地址栏的限制。
Post:可以提交大体积的数据
Get:对于敏感信息不安全。
Post:对于敏感信息安全
Get:会将提交信息封装在请求行,也就是http消息头之前
Post:会将提交信息封装在数据体中,也就是http消息头之后的空行后
对于服务端而言:
表单提交尽量用post,因为涉及到编码问题,因为tomcat服务端默认的解码是ISO8859-1
对于post提交的中文,在服务端可以直接使用setCharacterEncoding(”gbk”)就可以解决
对于get提交的中文,在服务端只能通过IOS8859-1将数据解码一次,再通过指定的码表GBK解码
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 配合Last-Modified判断资源是否更新过
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日期时间
五、HTTP响应
HTTP响应分为:状态行、若干响应头、一个空行、实体内容
一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干响应头(消息头)、以及实体内容
HTTP响应的细节——状态行
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
(1)状态行
格式: HTTP版本号 状态码 原因叙述举例:HTTP/1.1 200 OK
HTTP/1.1 200 OK (需用协议版本 状态码 原因描述)
常用状态码:
200 成功
302 请求重定向,配合Location头使用
304、307 使用缓存资源
404 请求资源未找到
500 服务器端错误
(2)常用响应头
Location: http://www.it315.org/index.jsp 配合302使用,重定向的地址
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配合If-Modified-Since使用判断资源是否更新过
Refresh: 1;url=http://www.it315.org定时刷新,第一个参数表示隔多长时间刷新,第二个参数表明刷新到哪个URL,如果没有第二个参数就刷新当前页面
Content-Disposition: attachment;filename=aaa.zip下载相关头
Transfer-Encoding: chunked 传输数据的方式
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
ETag: W/"83794-1208174400000"配合If-None-Match使用判断资源是否有过修改
Expires: -1 设置缓存时间,可以被设置为一个时间值,指定资源缓存到何时,如果设置为0或-1,则不缓存
Cache-Control: no-cache 设置不缓存
Pragma: no-cache 设置不缓存
* 以上三个头都是用来控制缓存的,是由于历史原因导致不同浏览器使用不同头,我们一般同时使用这三个。
Connection: close/Keep-Alive 是否保持连接
Date: Tue, 11 Jul 2000 18:23:51 GMT 日期时间