1、HTTP简介
WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循HTTP协议。HTTP是TCP/IP协议的一个应用层协议,用于定义WEB服务器之间交换数据的过程及数据本身的格式。常见的HTTP协议版本有HTTP/1.0和HTTP/1.1。
2、HTTP1.0的基本运行方式
- 基于HTTP协议的客户/服务器模式的信息交换过程,如下图所示,它一共有四个过程:建立连接、发送请求信息、发送响应信息和关闭连接。
- 浏览器和WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
- 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应。
- 无状态
3、浏览器访问多图网页
- 在一个HTML页面中如果包含
<img>
标记的话,当浏览器解析到这些标记的时候,还会向服务器请求访问标记中指定的文件,即再次建立连接并发出HTTP请求。 - 如果HTML页面中有一个超级链接:
<a href=”http://www.itcast.cn”>itcast</a>
,当点击这个链接时,也会触发浏览器与WEB服务器开始一次新的HTTP通信。
4、HTTP1.1详解
- HTTP1.1的特点:
- 在一个TCP连接上可以传送多个HTTP请求和响应
- 多个请求和响应过程可以重叠
- 增加了更多的请求头和响应头,比如Host 、if-Unmodified-Since请求头等
4.1、HTTP请求消息
客户端连上服务器后,向服务器请求某个web资源,称为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包含:一个请求行、若干消息头、以及请求正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开。
Example:
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 // 2~8行为多个消息头,用于描述客户端请求那台主机,以及客户端的一些环境信息等 // 一个空行
4.2、HTTP响应消息
- 一个HTTP响应代表服务器向客户端回送的数据
- 一个完整的HTTP响应包括如下内容:一个状态行、若干消息头、以及响应正文,其中的一些消息头和正文是可选的,消息头和正文内容之间要用空格隔开
- 在一个HTTP响应中,WEB服务器通过响应头向web客户端描述客户端的请求成功与否,以及它所发送的数据类型等一些信息,客户端通过这些信息,进而可以知道如何对数据进行处理
Example:
HTTP/1.1 200 OK // 状态行,用于描述服务器对请求的处理结果 Server: Microsoft-IIS/5.0 Date: Thu, 13 Jul 2000 05:46:53 GMT Content-Length: 2291 Content-Type: text/html Cache-control: private // 2~6行为多个消息头,用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述可以通知客户端如何处理等一会它回送的数据 // 一个空行 <HTML> <BODY> …… // 实体内容
4.3、HTTP消息头(请求和响应的共性)
- 使用消息头,可以实现HTTP客户机和服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令
- 每个消息头包含一个头字段名称,然后一次是冒号、空格、值、回车和换行符
- example :
Accept-Encoding: gzip, deflate
- example :
- 消息头字段名是不区分大小写的,但习惯上讲每个单词的第一个字母大写
- 整个消息头部分中的各行消息头可以按任意顺序排列
- 消息头又可以分为通用信息头、请求头、响应头、实体头等四类
- 许多请求头字段都允许客户端在值部分指定多个可接受的选项,过个选项之间用逗号分隔
- 有些头字段可以出现多次,比如,响应消息中可以包含有多个“Warning”头字段
4.4、HTTP请求行
- 请求行
- 格式: 请求方式 资源路径 HTTP版本号
,example : GET /temp3o116.shtml HTTP/1.1
- 请求方式:GET、POST、HEAD、OPTIONS、DELETE、TRACE、PUT
- 用户如果没有设置,默认情况下浏览器向服务器发送的都是GET请求,例如在浏览器中直接输入地址访问,点击超链接访问等都是GET,用户如果想把请求方式改为POST,可以通过更改表单的提交方式实现
- 不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上
- 格式: 请求方式 资源路径 HTTP版本号
- GET方式
- 如果请求的方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分割,example :
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
-GET方式的特点:在URL地址后附带的参数是有限的,其数据容量通常不能超过1K
- 如果请求的方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分割,example :
- POST方式
- 如果请求的方式为POST方式,则可以在请求的正文内容中向服务器发送数据,POST方式的特点是发送的数据量无限制
4.5、HTTP响应的细节 --- 状态行
- 状态行
- 格式: HTTP版本号 状态码 原因叙述
- example :
HTTP/1.1 200 OK
- 格式: HTTP版本号 状态码 原因叙述
状态码用于表示服务器对请求的各种不同处理的结果和状态,它是一个三位的十进制数。响应码分为5类,使用最高位为1到5来进行分类如下所示:
- 常用状态码
- 200(正常) : 表示一切正常,返回的是正常的请求结果
- 302/307(临时重定向):指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出
- 304(未修改):表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求
- 404(找不到):服务器上不存在客户机所请求的资源
- 500(服务器内部错误):服务器端的程序发生错误
4.6、HTTP请求的细节
4.6.1、请求头1
- 请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型(MIME类型)、压缩方法、语言以及发出请求的超链接所属页面的URL地址等信息。
- 常见的请求头:
- Accept:浏览器可接受的MIME类型
- Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
- Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
- Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
- Host:初始URL中的主机和端口
- Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页
- Content-Type:内容类型
###4.6.2、请求头2
- If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
- User-Agent:浏览器类型.
- Content-Length:表示请求消息正文的长度
- Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
- Cookie:这是最重要的请求头信息之一
- Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
4.7、HTTP响应的细节
4.7.1、常用响应头1
- 响应头字段用于向客户端传递附加信息
- 常用响应头
- 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服务器发送的内容的MIME类型
- Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
- Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒
4.7.2、常用响应头2
- Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件
- Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie
- Expires: -1
- Cache-Control: no-cache (1.1)
- Pragma: no-cache (1.0)
- Connection: close/Keep-Alive
- Date: Tue, 11 Jul 2000 18:23:51 GMT
来源:https://www.cnblogs.com/CoderLiLe/p/5390604.html