一、HTTP 协议简介
1、概念
HTTP:Hyper Text Transfer Protocol 超文本传输协议。
是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
传输协议:定义了客户端和服务器端通信时,发送数据的格式。
报文:客户端与服务端通信时传输的内容我们称之为报文。
HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“
2、特点
(1)基于 TCP/IP 的高级协议
(2)默认端口号:80
(3)基于请求/响应模型的:一次请求对应一次响应
(4)无状态的:每次请求之间相互独立,不能交互数据
二、HTTP 协议的会话方式
浏览器与服务器之间的通信过程要经历四个步骤
1、浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接
2、浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对
三、HTTP1.0 和 HTTP1.1的区别
HTTP1.0(短连接):浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接(每次请求响应都会建立新的连接)
HTTP1.1(长连接):允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率(请求的连接可以复用)
四、报文
1、报文格式
客户端与服务端通信时传输的内容称之为报文,报文有着它自己的格式。
2、请求的HTTP协议格式
HTTP 协议中有七种请求方式,常用的有两种 GET 和 POST。
(1)请求报文格式
请求首行(请求行);
请求头信息(请求头);
空行;
请求体;
(2)GET 请求
1、请求行:
① 请求的方式 GET
② 请求的资源路径[+?+请求参数]
③ 请求的协议的版本号 HTTP/1.1
2、请求头
key :value 组成 不同的键值对,表示不同的含义
注意:GET 请求没有请求体,请求体在 url 地址栏中。
(3)POST 请求
1、请求行
① 请求的方式 POST
② 请求的资源路径
③ 请求的协议的版本号 HTTP/1.1
2、请求头
key :value 不同的请求头,代表不同的含义
空行 用来分割请求头和请求体
3、请求体 发送给服务器的数据(封装请求参数)
(4)常用请求头的说明
Accept:表示客户端可以接收的数据/文档类型,*/*表示什么都可以接收;
Referer:表示请求发起时,浏览器地址栏中的地址从哪里来(例从百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了)主要用于① 防盗链;② 统计工作
User-Agent:表示浏览器的信息(可以在服务器端获取该头的信息,解决浏览器的兼容性问题)
Accept-Language:告诉服务器客户端可以接收的语言类型,zh-CN:支持中文;en-US支持英文
Accept—Encoding:告诉服务器可以接收的数据编码(压缩)格式,gzip,defalte:支持的压缩格式,数据在网络传递时,可以服务器会把数据压缩再发送
Host:表示请求的服务器ip和端口号;
Content-Length:表示请求体数据的长度
connection:告诉服务器请求连接如何处理,keep-Alive:表示回传数据后不要马上关闭,保持一小段时间的连接(默认3000ms);Closed:马上关闭
Cache-Control:表示如何控制缓存 no-cache 表示不缓存
Content-Type:表示发送的数据的类型
① application/x-www-form-urlencoded:表示提交的数据格式是 name=value&name1=value2,然后对其 URL 编码(URL编码是把非英文内容转换为%xx%xx)
② multipart/form-data:表示以多端的形式提交给服务器(以流的形式提交,用于上传文件)
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送过去
(5)哪些是 GET 请求,哪些是 POST 请求
GET请求:
-
-
-
-
- form 标签中 method=get(不写,默认也是get)
- a 标签的跳转
- link 标签引入 CSS 文件
- script 标签引入 JS 文件
- img 标签引入 图片
- iframe 引入 HTML 页面
- 在浏览器地址栏中输入地址然后敲回车
-
-
-
POST请求:
-
-
-
-
- form 标签中 method=post
-
-
-
3、响应的HTTP协议格式
(1)响应报文格式
1、响应首行(响应行)
① 响应的协议和版本号;
② 响应的状态码;
③ 响应的状态描述符;
2、响应头信息(响应头)
key :value 不同的响应头,代表不同的含义
空行 用来分割响应头和响应体。
3、响应体 回传给客户端的数据
(2)响应报文
(3)常见的响应头说明
Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式;
Content-disposition:服务器告诉客户端以什么格式打开响应体数据;
① in-line:默认值,在当前页面内打开;
② attachment;filename=xxx;以附件形式打开响应体。(一般应用于文件下载)
(4)常用的响应码说明
响应码对浏览器很重要,它告诉浏览器响应的结果,状态码都是3位数字:
1xx:服务器收客户端信息,但是没有接受完成,等待一段时间后,发送1xx状态码
2xx:成功。如:200请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
3xx:重定向。如:302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;304:代表访问本地缓存
4xx:客户端错误。如:404:表示请求服务器已经收到了,请求的资源可能没有找到(说明客户端错误的请求了不存在的资源)或者请求地址写错了;405:请求方式没有对应的doxxx方法;
5xx:服务器错误。如:500:表示服务器已经收到请求了,但服务器内部出现了错误(代码出现错误)
五、MIME 类型说明
MIME 是 HTTP 协议中数据类型。
MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。 MIME 类型的格式是“大类型/小
类型” , 并与某一种文件的扩展名相对应。
常见的 MIME 类型:
文件 | MIME 类型 |
超文本标记语言文本 | .html , .htm text/html |
普通文本 | .txt text/plain |
RTF 文本 | .rtf application/rtf |
GIF 图形 | .gif image/gif |
JPEG 图形 | .jpeg,.jpg image/jpeg |
au 声音文件 | .au audio/basic |
MIDI 音乐文件 | mid,.midi audio/midi,audio/x-midi |
RealAudio 音乐文件 | .ra, .ram audio/x-pn-realaudio |
MPEG 文件 | .mpg,.mpeg video/mpeg |
AVI 文件 | .avi video/x-msvideo |
GZIP 文件 | .gz application/x-gzip |
TAR 文件 | .tar application/x-tar |