一、HTTP简介
1、 HTTP协议(Hyper Text Transfer Protocol)是超文本传输协议的缩写,用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议。HTTP协议是基于TCP/IP通信协议来传递数据。
2、HTTP协议工作在客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器:Apache服务器,IIS服务器(Internet Information Services)等;Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP端口号:默认80,也可以改为8080或者其它端口。
注意事项:
HTTP是无连接的;限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP是无状态;无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP是媒体独立的;是指只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
3、HTTP协议通信流程:
图片来自网路
4、HTTP报文结构
4.1 请求报文
请求报文由请求行、请求头、空行、请求内容四部分组成。
4.1.1 请求行
由请求方法字段、URL字段、协议版本字段三部分构成,它们之间由空格隔开。
常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
GET - 请求指定的页面信息,并返回实体主体。
POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
HEAT - 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
PUT - 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE - 请求服务器删除指定页面。
CONNECT - HTTP/1.1 协议中预留给能够将连接改为管道的方式的代理服务器。
OPTIONS - 允许客户端查看服务器的性能。
TRACE - 回显服务器收到的请求,主要用于测试或诊断。
URL(uniform resource locator)统一资源定位器
它是一种具体的URI(uniform resource identifier,统一资源标识符,用来唯一的标识一个资源),即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
1、协议(或称为服务方式)
2、存有该资源的主机IP地址(有时也包括端口号)
3、主机资源的具体地址。如目录和文件名等
4.1.2 请求头
key/value对组成,每行为一对,key和value之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。
典型的请求头有:
User-Agent:生成请求的浏览器类型
Accept:客户端可识别的响应内容类型列表;星号*用于按范围将类型分组。*/*表示可接受全部类型,type/*表示可接受type类型的所有子类型。
Accept-Language: 客户端可接受的自然语言
Accept-Encoding: 客户端可接受的编码压缩格式
Accept-Charset: 可接受的字符集
Host: 请求的主机名,允许多个域名绑定同一IP地址
connection:连接方式(close或keeplive)
Cookie: 存储在客户端的扩展字段
4.1.3 空行
最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。
4.1.4 请求内容
请求内容主要用于POST请求,与POST请求方法配套的请求头一般有Content-Type(标识请求内容的类型)和Content-Length(标识请求内容的长度)
4.2 响应报文
由状态行、响应头、空行和响应内容四部分构成
4.2.1 状态行
由HTTP协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。
状态码由3位数字组成,第一位标识响应的类型,常用的5大类状态码如下:
状态码 | 描述 | 例子 |
---|---|---|
1xx | 表示服务器已接收了客户端的请求,客户端可以继续发送请求 | |
2xx | 表示服务器已成功接收到请求并进行处理 | 200 OK:表示客户端请求成功 |
3xx | 表示服务器要求客户端重定向 | |
4xx | 表示客户端的请求有非法内容 | 400 Bad Request: 表示客户端请求有语法错误,不能被服务器解析;401 Unauthonzed:表示请求未经授权;404 Not Found:请求的资源不存在 |
5xx | 标识服务器未能正常处理客户端的请求而出现意外错误 | 500 Internal Server Error:表示服务器发生了不可预期的错误,导致无法完成客户端的请求;503 Service Unavailable:表示服务器当前不能处理客户端的请求(一般一段时间后可能回复正常); |
4.2.2 响应头
一般情况下,响应头会包含以下,甚至更多的信息。
Location:服务器返回给客户端,用于重定向到新的位置
Server: 包含服务器用来处理请求的软件信息及版本信息
Vary:标识不可缓存的请求头列表
Connection: 连接方式。
对于请求端来讲:close是告诉服务端,断开连接,不用等待后续的求请了。keeplive则是告诉服务端,在完成本次请求的响应后,保持连接,等待本次连接后的后续请求。
对于响应端来讲:close表示连接已经关闭。keeplive则表示连接保持中,可以继续处理后续请求。Keep-Alive表示如果请求端保持连接,则该请求头部信息表明期望服务端保持连接多长时间(秒),例如300秒,应该这样写Keep-Alive: 300
4.2.3 空行
最后一个响应头之后就是空行,用于告诉请求端以下内容不再是响应头的内容了。
4.2.4 响应内容
服务端返回给请求端的文本信息。
5、实例
参考资料:
https://tools.ietf.org/html/rfc2616