http协议是一种超文本传输协议,主要用于web超链接的传输。
http协议到目前已经有多个版本,最早的0.9版本,常用的是1.0和1.1版本,最新的是2.0版本
HTTP协议格式
1、Http报文格式:
HTTP协议的请求报文和响应报文包括三个部分:
起始行(start line):描述请求或响应的基本信息
头部字段集合(header):使用key-value的格式
消息正文(entity):实际传输的数据 (可以有也可以没有)
2、请求报文:
METHOD 空格 URL 空格 VERSION 换行
请求方法:GET、HEAD、PUT、POST
请求目标:通常是一个URL,编辑了请求方法要操作的资源
版本号:表示报文使用的HTTP协议版本
3、响应报文格式
VERSION 空格 StATUS CODE 空格 REASON 换行
版本号:表示报文使用的HTTP协议版本
状态码:一个三位数,表述状态
原因:作为数字状态码的补充,更详细的解释文字,帮助别人理解原因。
格式详细内容
1、请求行
请求行包含以下三个部分:请求方式、资源路径、http版本协议
例如:
请求方式 | 资源路径 | http版本协议 |
Get | /index.html | HTTP/1.1 |
请求方式有8中,常用的有两种
get:请求被获取请求行的url所标识的资源
post:向指定的资源提交数据,请求服务器进行处理
head:请求获取由url所标识的响应消息头
put:将网页放置到指定的url位置
delete:请求服务器删除url所标识的资源
trace:请求服务器回送收到的请求信息,主要用于测试或诊断
connect:保留将来适应
options:请求查询服务器性能或着查询与资源相关的选项和需求
这里主要讲一下get和post的区别:
1、post传输数据无大小限制
2、post比get安全
2、消息请求头
消息请求主要是用于向服务器端传递附加消息,例如:传输的数据格式、压缩方法、语言以及发送请求url中的地址信息。
消息请求头中的数据都是以key-value格式定义的。key和value之间用“:”隔开。消息请求头可以自己定义,也可以适应默认的。常用的请求头字段如下:
字段 | 含义 |
accept | 用于指出客户端程序能够处理的MIME 例如:accept:text/html 表示客户端希望接受html文本 accept:image/gif 表示客户端希望接受GIF图像格式的资源 Accept:image/* 表示客户端接受所有格式的image类型 Accept: */* 表示客户端可以接受所有格式的内容 |
Accept-charaet | 用于告知服务器端客户端所使用的字符集 |
Accept-Endcoding | 用于指定客户端能够进行的数据编码方式,这里的编码方式一般指的是压缩格式 |
Accept-Language | 用于指定客户端期望服务器返回那个国家的语言的文档 |
Authorization与 Proxy-Authorization | 认证信息 |
Host | 用于指定资源所在的服务器和端口号 |
If-match | 浏览器和代理服务器都可以缓存服务器回送的网页文档,当用户再次访问已缓存的页面时,如果网页没有更新,则会通知浏览器访问本地缓存页面 |
If-Modified-Since | 作用和If-match类似, |
Range和If-Range | 用于指定服务器只需返回文档中的部分内容以及内容范围 |
Max-Forward | 用于指定当前请求可以途径的代理服务器数量。 |
Referer | 用于记录超链接向服务器发送Get请求时,记录超链接所在的位置 |
User-Agent | 用于指定浏览器或者其他客户端程序使用的操作系统及版本、浏览器版本等 |
3、响应消息行
http响应状态行包括协议版本、状态码、状态。
例如:
协议版本 | 状态码 | 状态 |
Http/1.1 | 200 | ok |
4、响应消息头
服务器端通过响应消息头向客户端传递附加信息,包括服务程序名、被请求资源需要的认证方式、客户端请求资源最后修改的时间、重定向地址等信息。
字段名 | 含义 |
Accept-Range | 用于说明服务器是否接收客户端使用Range请求资源 |
Age | 用于指出当前网页文档可以在客户端或代理服务器中缓存的有效时间 |
Etag | 用于向客户端传送代表实体内容特征点的标记信息,这些标记信息称为实体标签 |
Location | 用于通知客户端获取请求文档的新地址 |
Retry-After | 这个字段可以和503状态码配合使用,告诉客户端在什么时间可以重新发送请求 |
Server | 用于指定服务器软件产品的名称 |
Vary | 用于指向服务器所生成的响应内容的那些请求头字段名 |
Www-Authentication 和 Proxy-Authentication | 当客户端访问受口令的网页文件时,服务器会在响应消息中回送401响应状态码和响应头。 |
Refresh | 用于告诉浏览器自动刷新页面的时间 |
Content-Disposition | 如果服务器希望浏览器不直接处理响应实体内容,而是让用户选择将响应的实体内容保存到一个文件中,就需要使用这个头字段。 |
5、其他通用头字段
字段 | 含义 |
Cache-Control | 他是用于通知位于客户端和服务端之间的代理服务器如何使用已缓存的页面 |
Connection | 用于指定处理完本次请求/响应后,客户端和服务器端是否还要继续保持链接 |
Date | 用于表示http消息产生当前时间 |
Pragma | 主要用于1.0版本通知代理服务器和客户端如何使用缓存页面 |
Transfer-Encoding | 指定响应消息的实体内容采用哪种传输编码方式 |
Trailer | 用于标识放置在数据之后的头字段 |
Upgrade | 用于指定客户端想要从当前协议切换的新的通信协议 |
Via | 用于指定http消息途径的代理服务器所使用的协议 |
Warning | 用于说明其他头字段和状态码不呢个说明的一些附加信息 |
6、实体头字段
字段 | 含义 |
Allow | 指定请求资源所支持的请求方式,用于通知客户端应该严格按照指定的方式请求资源 |
Content-Language | 用于指定返回网页文档的画家语言类型 |
Content-Length | 用于表示实体内容的长度 |
Content-Location | 用于指定响应消息中实体内容的实际位置路径 |
Content-Range | 用于指定服务器返回的部分实体内容的位置信息 |
Content-MD5 | 用于提供对实体内容的完整性检查,他的值是对实体内容MD5数字摘要后再进行Base64编码结果 |
Content-type | 用于指出实体内容的MIME类型 |
Centent-Encoding | 用于指定实体内容的压缩编码方式 |
Expires | 用于指定当前文档的过期时间 |
Last-Modified | 用于指定文档最后的更改时间 |