一、什么是HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP协议采用了请求/响应模型。
1、主要特点
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- 支持B/S及C/S模式。B/S结构(Browser/Server)
2、HTTP网络协议栈:
TCP协议是传输控制协议,其特点:
- 无差错的数据传输
- 按序传输(数据总是会按照发送的顺序到达)
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
二、HTTP请求报文与响应报文格式
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息,下面看下消息的报文格式。
1、请求报文包含三部分:
- 请求行:包含请求方法、URL、HTTP版本信息
- 请求首部字段:以 "字段名:值" 这个格式定义
- 请求内容实体
2、响应报文包含三部分:
- 状态行:包含HTTP版本、状态码、状态码的原因短语
- 响应首部字段:以 "字段名:值" 这个格式定义
- 响应内容实体
3、GET请求体详情:
GET /Example03/ HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=9E0C4BDEAFD1EB2B1060D69C3B96F72D
(1)请求首行:GET /Example03/ HTTP/1.1
GET :指的是请求方式。
/Example03 :指的是请求地址,即URL。
HTTP/1.1 :指的是协议及版本号。
(2)请求头信息:格式 "字段名:值"
- Accept :告诉服务器当前浏览器支持的MIME类型。
- Accept-Language :告诉服务器当前浏览器支持的语言环境。
- User-Agent :表示当前浏览器的类型和OS的类型,其中MSIE 8.0表示是ie浏览器,版本是8.0等。
- Accept-Encoding :当前浏览器支持的数据压缩格式,有时候服务器给浏览器发送的东西很大,这时候服务器就要考虑当数据被压缩后,浏览器能不能给解压出来,那么这个请求头就是浏览器告诉服务器它能够解压的格式。
- Host :浏览器请求的主机名和端口号,在这里它请求的主机是localhost,虽然后面没有显示端口号,但是你要知道这个端口号是80,它是http协议默认的端口号。
- Connection :连接的方式,Keep-Alive表示的意思是连接一会。
- Cookie :这是一个与cookie相关的请求头。
(3)请求信息中的空行,处于请求头和请求正文之间。
(4)以上请求信息中没有请求正文,是因为该请求方式是GET请求,而GET方式的请求信息中是没有请求正文的。4、POST请求体
POST /Example04/index.jsp HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Referer: http://localhost:8080/Example04/form.html
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
username=zhangsan&password=123
- Referer:当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。
- Content-Type:正文类型,这里已form表单形式POST请求。
- Cache-Control:请求和响应遵循的缓存机制。
- 请求头和请求数据之间保持一个空行。
三、GET方法与POST方法的区别
1、GET重点在从服务器上获取资源,POST重点在向服务器发送数据;
2、GET传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII,可能会出现乱码。POST传输数据通过Http的post机制,将字段与对应值封存在请求实体<request-body>中发送给服务器,在URL中是不可见的;
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
3、首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
GET:特定浏览器和服务器对URL长度有限制,因此对于GET提交时,传输数据就会受到URL长度的限制。
Post可以传输大量数据,所以上传文件时只能用Post方式;理论上数据不受限,但实际各个WEB服务器会规定对post提交数据大小进行限制。
四、请求响应状态码
- 1xx:指示信息–表示请求已接收,继续处理。
- 2xx:成功–表示请求已被成功接收、理解、接受。
- 3xx:重定向–要完成请求必须进行更进一步的操作。
- 4xx:客户端错误–请求有语法错误或请求无法实现。
- 5xx:服务器端错误–服务器未能实现合法的请求。