HTTP协议的概念
- 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。它是TCP/IP协议的一个应用层协议简单来说,HTTP协议就是客户端和服务器交互的一种通迅的格式。
- 特点:
- 基于TCP/IP的高级协议;
- 默认端口号:80;
- 基于请求响应模型:一次请求对应一次响应
- 无状态:每次请求之间相互独立,不能交互数据.
HTTP1.0和HTTP1.1
- HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源【短连接,获取资源后就断开连接】
- HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源【保持连接】
HTTP请求
- 浏览器向服务器请求某个web资源时,称之为浏览器向服务器发送了一个http请求。一个完整http请求应该包含三个部分:
- 请求行【描述客户端的请求方式、请求的资源名称,以及使用的HTTP协议版本号】
- 多个消息头【描述客户端请求哪台主机,以及客户端的一些环境信息等】
- 一个空行:分割POST请求的请求头和请求体;
- 请求体(正文:post方式才有):封装POST请求消息的请求参数。
请求行
- 请求行:
GET /java.html HTTP/1.1
。请求行中的GET称之为请求方式,之后跟请求的路径,最后是请求协议版本。请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT。
- 常用的请求方式有:POST,GET
- 一般来说,当我们点击超链接,通过地址栏访问都是get请求方式。通过表单提交的数据一般是post方式。
- 可以简单理解GET方式用来查询数据,POST方式用来提交数据,get的提交速度比post快。
- GET方式:
- 请求参数在请求行中(即url后)
- 请求的url是有限制的。
- POST方式:
- 请求的参数在请求体中;
- 请求的url长度没有限制。
请求头
- 格式:
请求头名称:请求头值
- User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,我访问你使用的浏览器的版本信息】
- 可以在服务器端捕获该头的信息,解决浏览器的兼容问题。
- Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,当前请求是从那个页面来的---反盗链】
- 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【浏览器告诉服务器,缓存数据的时间】
- Cookie【浏览器告诉服务器,带来的Cookie是什么】
- Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】
- Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】
HTTP响应
- 一个HTTP响应代表着服务器向浏览器回送数据。一个完整的HTTP响应应该包含四个部分:
- 一个响应行【用于描述服务器对请求的处理结果。】
- 多个响应头【用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据】
- 一个响应空行
- 响应体:服务器向客户端回送的数据
响应行
- 格式: HTTP版本号 状态码 原因叙述
- 响应行:HTTP/1.1 200 OK
- 状态码用于表示服务器对请求的处理结果和响应的状态,它是一个三位的十进制数。响应状态码分为5类:
- 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx代码;
- 2xx:成功。代表:200
- 3xx:重定向。代表:302(重定向),304(访问缓存)。
- 4xx:客户端错误
- 404:请求路径没有对应资源;
- 405:请求方式没有对应的doXxx方法;
- 5xx:服务器端错误。代表:500(服务器内部出现异常)。
响应头
- 格式:头名称:值
- Content-Type: text/html; charset=UTF8 【服务器告诉浏览器本次响应体数据的格式(html)以及编码格式(UTF-8)】
- Content-Disposition:
- attachment; filename=aaa.zip【服务器告诉浏览器以下载方式打开数据】
- in-line:默认值,在当前页面打开数据
- Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个页面】
- Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】
- Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式】
- Content-Length: 80 【服务器告诉浏览器回送数据的长度】
- Content-Language: zh-cn 【服务器告诉浏览器,服务器的语言环境】
- Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】
- Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要定时刷新】
- Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块方式回送】
- Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie】
- Expires: -1【服务器告诉浏览器不要设置缓存】
- Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存】
- Pragma: no-cache 【服务器告诉浏览器不要设置缓存】
- Connection: close/Keep-Alive 【服务器告诉浏览器连接方式】
- Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】