http协议是一种超文本传输协议,是一种请求,响应式的协议。
http协议的特点:
1. 支持客户端(浏览器)/服务器模式
2. 简单快速:客户端向服务器请求服务时,只需传送请求方式和路径
3. 灵活,http允许传输任意类型的数据
4. 无状态,http是无状态协议,无状态是指对事物处理没有记忆能力
http消息
1. 当浏览器向服务器发送请求数据的时候,即http请求消息
2. 服务器向浏览器回送处理后的数据,即http响应消息
3.1HTTP请求消息
http请求行
http请求行包含三个部分:请求方式,资源路径,http版本
最常用的请求方式:GET ,POST,但是请求方式有八种
请求方式 | 含义 |
GET | 请求获取请求行的URI所标识的资源 |
POST | 向指定资源提交数据,请求服务器进行处理 |
HEAD | 请求获取由URI所标识资源的响应消息头 |
PUT | 将网页放置到指定URI位置(上传/移动) |
DELETE | 请求服务器删除URI所标识的资源 |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或者诊断 |
CONNECT | 保留将来使用 |
OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项和需求 |
注意:网页上的表单默认的请求方式是GET,
POST的特点:
1. 传输数据无大小限制
GET方式是通过请求参数传递数据的,所以最多传递不超过1kb的数据
POST方式是通过实体内容传递数据的
2. POST比GET请求方式更安全
GET请求方式的参数信息都会在URI地址栏明文显示
POST请求方式隐藏在实体内容中
http请求消息头在http请求行之后
http请求消息头主要用于向服务器传送附加消息,如客户端可以接受的数据类型,压缩方法,语言以及发送请求的超链接所属页面的URI地址信息
常用的HTTP请求头字段
1.Accept :指出客户端可以接受的数据类型
Accept:text/html 表明客户端希望接受HTML文本
Accept:image/gif 表明客户端希望接受Gif格式的图像资源
Accept:image/* 表明客户端可以接受所有image格式的子类型
Accept:*/* 表明客户端可以接受所有格式的内容
2.Accept-Charset 用于告知服务器端,客户端所使用的字符集
3.Accept-Encoding 用于指定客户端能够进行解码的数据编码方式
4.Accept-Language 客户端期望服务器返回那个国家语言的文档
5.Host 指定资源所在的主机名和端口号
6.If-Match 可以附带以前缓存的实体标签内容,这个请求被视为一个条件请求
7.Range和If-Range 指定服务器只需返回文档中的部分内容及内容范围,适用于断点续传
8.Max-Forward 指定当前请求可以经过的代理服务器数量,每经过一个,该数值减1
9.Referer 当单击超链接向服务器发送GET请求时,浏览器会在发送的请求中带上该字段(可用于防止盗链)
10.User-Agent 指定浏览器或者其他客户端程序所使用的操作系统及版本,浏览器及版本,浏览器渲染引擎,浏览器语言等
3.2HTTP响应消息
HTTP响应消息包括响应状态行,响应消息头,实体内容
1. 响应状态行包括HTTP版本,状态码,对状态码描述的文本信息
状态码:
1xx:表示请求已经接受,需要继续处理
2xx:表示请求已成功被服务器接收,理解并接受
3xx:为完成请求,客户端需进一步细化请求
4xx:客户端的请求有错误
5xx:服务器端出现错误
常用的状态码:
200 (正常):客户端请求成功 响应消息返回正常的请求结果
400(请求无效):客户端有不正确的语法格式(用Ajax提交的时候,因为前后端封装的对象属性不一样,会造成400)
403(禁止):服务器理解客户端的请求,但是拒绝处理
404(找不到):表示服务器不存在客户端请求的资源
500(内部服务器错误):大部分情况下是服务器端的CGI,jsp, ASP出现错误
2. 响应消息头
服务器向客户端传递附加信息,包括服务程序名,被请求资源需要的认证方式,重定向地址,客户端请求资源的最后修改时间等
常见的响应消息头:
1.Accept-Range 说明服务器是否接收客户端使用Range请求头字段请求资源
2.Age 指出当前网页文档可以在客户端或代理服务器中缓存的有效时间
3.Etag 用于向客户端传送代表实体内容特征的标记信息,这些标记信息也称为实体标签
每个版本资源的实体标签是不同的,通过这个标签可以判断不同时间下,同一资源路径下的实体内容是否相同
4.Location 用于通知客户端获取请求文档的新地址
5.Retry-After 该字段可以与503状态码配合使用,告诉客户端什么时候可以重新发送请求,也可以与任何一个3xx状态码配合使用,告诉客户端处理重定向的最小延时时间
6.Server 用于指定服务器软件产品的名称
7.Vary 用于指定影响了服务器所生成的响应内容的那些请求头字段名
8.Refresh 用于告诉浏览器自动刷新页面的时间,是以秒为基本单位
9.Content-Disposition 用于服务器希望浏览器直接处理响应的实体内容,而是让用户选择将实体内容保存到一个文件中
3.3HTTP其他字段
通用头字段
1.Cache-Control 用于通知位于客户端与服务器之间的代理服务器如何使用已缓存的页面
2.Connection 用于指定处理完本次请求/响应后,客户端与服务器是否还要保持连接
3.Date 用于表示HTTP消息产生的当前时间
4.Pragma 通知代理服务器和客户端如何使用缓存页面-
5.Transfer-Encoding 通过该字段通知客户端响应数据的长度,因为HTTP1.1协议是持久化协议
6.Via 用于指定HTTP消息所途径的代理服务器所使用的协议与主机名
7.Warning 用于说明其他头字段和状态码不能说明的一些警告信息
实体头字段
1.Allow 指定请求资源所支持的请求方式
2.Content-Language 用于指定返回网页文档的国家语言类型
3.Content-Length 用于表示实体内容的长度
4.Content-Location 用于指定响应消息中实体内容的实际位置路径(当一个请求资源有多个国家语言版本的时候,每个国家语言版本都有自己的位置,这时,请求资源路径和响应的实体内容的实际位置路径可能是不同的)
5.Content-Type 用于指出实体内容的MIME类型(多用途互联网邮件扩展类型),HTTP中采用MIME来标识不同的数据类型,MIME类型包含主类型和子类型,两者之间用”/”隔开,也可以用”*”号通配符,MIME类型后面还可以指定响应内容中的字符码表,数据类型与字符码表之间用”;”隔开
客户端通过检查该字段就可以知道实体内容代表哪种格式的数据类型,tomcat中web.xml文件中有大量的<mime-mapping>元素,来实现文件扩展名和MIME类型的映射
6.Content-Encoding 用于指定实体内容的压缩编码格式,服务器端对实体内容的压缩不影响实体内容的MIME类型,被压缩的实体内容在客户端被解压的时候,MIME类型与Content-Type头字段指定的类型一致