HTTP简介
HyperText Transfer Protocol --- 》 超文本传输协议
什么是超文本?
包含由超链接和各种多媒体元素标记得文本。这些超文本文件彼此链接,形成网状,因此又被称为网页。这些链接用URL表示。最常见得超文本格式是超文本标记语言HTML。
作用:http协议是在浏览器和web服务器之间使用,用来传输网页。
所有的浏览器都懂http协议。
所有的web服务器:nginx,tomcat,iis,python,web,go web框架,Java web框架都能读懂http协议。
什么是URL?
URL即统一资源定位符(Uniform Resource Location)用来唯一的标识万维网中的某一个文档。URL由协议、主机和端口(默认为80)以及文件路径四部分构成。
什么是超文本传输协议http?
http是一种按照URL指示,将超文本文档从一台主机(web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
http的工作原理
在用户点击输入url为 http://www.baidu.com/index.html的链接后,浏览器和web服务器执行以下动作
1.浏览器分析超链接中的url
2.浏览器向dns请求解析网址www.baidu.com对应的IP地址
3.dns将解析出的IP地址202.2.16.21返回浏览器
4.浏览器与服务器建立tcp连接
5.浏览器请求相应文档:GET /index.html
6.服务器给出响应,将文档index.html发送给浏览器
7.浏览器显示文档index.html中的内容
8.释放tcp连接
连接:
长连接:长时间连接 --》保持一段时间,然后进行四次断开
短连接:短时间连接 --》事情完成就进行四次断开
http协议版本:
0.9 --》只支持短连接
1.0
1.1 --》支持长连接,传输的数据是文本格式
2.0 --》比较新的,速度更快,数据格式二进制,多路复用
HTTP的特点
- HTTP协议本身是无连接的
- HTTP协议是无状态的
- HTTP是面向文本的
http的连接方式(传输层的连接)和无状态性
非持久性连接
即浏览器每请求一个web文档,就创建一个新的连接,当文档传输完毕后,连接就立刻被释放。
>http1.0、http0.9采用此连接方式。
>对于请求的web页中包含多个其他文档对象(如图像、声音、视频等)的链接情况,由于请求每个链接对应的文档都要创建新连接,效率低下。
持久性连接
即在一个连接中,可以进行多次文档的请求和响应。服务器在发送完响应后,并不立即释放连接,浏览器可以使用该连接继续请求其他文档。连接保持的时间可以由双方进行协商。
无状态:是web服务器端的nginx不知道你的请求是第一次请求,还是第二次,新的请求还是旧的请求。是指同一个客户端(浏览器)第二次访问同一个web服务器上的页面时,服务器无法知道这个客户曾经访问过。http的无状态性简化了服务器的设计,使其更容易支持大量并发的http请求。
有状态:服务器收集了客户端的数据,记录了他的信息,通过这些信息可以判断你是老用户还是新用户
通过session和cookie技术实现有状态性
session 和 cookie技术:可以保留客户信息
session:用户的信息保存在服务器端 --》数据保存在数据库
cookie:web服务器让浏览器保存用户的信息,信息保存到客户端,放到浏览器的cookie(存放数据的地方)里
HTTP报文
HTTP有两类报文:
请求报文----从客户向服务器发送请求报文 ---》所有的数据都是ASCII码
响应报文----从服务器到客户的回答
HTTP请求报文和响应报文都是由三个部分组成的。
开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line)
首部行,用来说明浏览器、服务器或报文主体的一些信息。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
实体主体,在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段
请求报文的特点
请求行:方法,请求资源的URL,HTTP的版本
方法:对所请求的对象进行的操作,这些方法实际上也就是一些命令。
OPTION :请求一些选项的信息
GET :请求读取由URL所标志的信息
HEAD :请求读取由URL所标志的信息的首部
POST :给服务器添加信息
PUT :在指明的URL下存储一个文档
DELETE :删除指明的URL所标志的资源
TRACE :用来进行环回测试的请求报文
CONNECT :用于代理服务器
举例:
GET http://www.xyz.edu.cn/dir/index.htm HTTP/1.1
GET和POST的区别和联系:
都是客户机想获取服务器的资源 ---》用来告诉服务器的方法
GET 明文传输,在url里可以看到,携带信息量比较少
POST 明文传输,不在url里显示,是通过表单传输,携带信息量比较多
响应报文的特点
状态行:HTTP的版本,状态码,释放状态码的简单短语
状态码(Status-Code)都是三位数字的,分为5大类:
1xx:表示通知信息,如请求收到了或正在进行处理
2xx:表示成功,如接受或知道了
3xx:表示重定向,如要完成请求还必须采取进一步的行动
4xx:表示客户的错误,如请求中有错误的语法或不能完成
5xx:表示服务器的差错,如服务器失效无法完成请求