HTTP协议
一、HTTP协议
1. 概念
- HTTP(超文本传输协议)是用于在万维网服务器上传输超文本(HTML)到本地浏览器的传输协议
- TCP/IP协议簇的一员(HTML文本、图片、查询结构等)
- 基于传输层TCP的80端口
2. 万维网服务
- 采用C/S架构
- 客户机通过浏览器去请求,从而在浏览器上就可以看到对应图形界面 浏览器/服务器(B/S)
- 万维网服务的软件
- Windows server IIS
- apache(多平台)
- tomcat(多平台)
- nginx(多平台)
- ……
二、 HTTP工作原理
-
在客户端上使用浏览器通过URL向HTTP服务器发送请求
- URL(统一资源定位器),由三部分组成
- web服务器根据收到的请求直接向客户机响应信息
- 针对与HTTP默认端口号是80端口,默认端口可以改(会影响客户机的访问,建议改为其他非标准端口)
- 交互过程
-
特点
- HTTP是无连接的:限制每次只处理一个请求
- HTTP是独立:只要客户端和服务器知道如何处理数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type(消息内容类型)
- HTTP是无状态的:没有记忆能力,后续处理的内容需要前面内容时,就必须重传,每次连接传送的数据量比较大,从另一个方面来考虑,服务器不需要提供向前信息,所以应答比较快
三、HTTP报文分析
1. 组成
- 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况
- 报文头:起始行后面有零个或多个字段。每个字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔,首部以一个空行结束。
- 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体是要发送给服务器的数据;响应主体是要返回给客户端的数据。起始行和报文都是文本且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频)。当然,主体中也可以包含文本。
2. 请求报文
-
一个请求报文起始行的例子:
GET /dir/index.html HTTP/1.12
- GET:这里指明请求方法是GET,还有其它方法比如POST、DELETE、HEAD、OPTIONS、PUT、TRACE
- /dir/index.html:这里指明URL,它和报文头的Host属性组成完整的请求URL
- HTTP/1.1:这里指明协议名称及版本号
-
请求方法:
- get是最常用的方法,通常用于请求服务器发送的某个资源
- post方法可以向服务器提交参数及表单,包括文件流等
- head方法与get方法类似,但是在服务器响应中只返回首部
- put方法与get方法从服务器读取文档相反,put方法会向服务器写入文档
- trace回显浏览器的请求
- options方法请求web服务器告知其支持的各种功能
- delete方法请求服务器删除请求URL所指定的资源
3. 响应报文
-
一个响应报文起始行的例子:
HTTP/1.12 200 OK
- 跟请求报文比,响应报文的起始行里多了一个状态码来告诉客户端本次请求的处理结果。以下是状态码的类型: