- HTTP协议:超文本传输协议
- 无状态协议:协议对于事物处理没有记忆功能(下一次请求页面不可以得到上一次页面的信息,不可以进行数据保存,数据独立,没有联系),平常网页的数据保存,是通过cookie、session等机制实现有状态的web
Web=http协议+状态机制+其他机制
- 为什么不改进:
- 历史原因,最初只浏览静态文件,负担轻
- 每一次的请求都有状态,在两个网页之间维持状态代价太高,也不是所以页面之间需要状态,所以引入了其他机制(cookie、session、application)来实现有状态的连接
- 用于通过Internet发送请求消息和相应消息
- 通过浏览器和服务器进行数据传输,进行超文本(文本、图片、视频)传输的规定(HTTP协议规定了超文本传输要遵守的规则)
- 用户在浏览器输入请求域名——HTTP协议将数据传送给服务器——服务器通过HTTP协议将数据返还到浏览器上
- 流程
- 用户:在浏览器中输入URL
- 浏览器:发送http请求——(包含)请求行--头--体
- 服务器:处理http请求
- 浏览器:响应http请求——(包含)响应码--头--体
- URL:统一资源定位符,包含了用于查找的资源的足够的信息
- 链接地址 2.键值对的方式,两个当前请求参数给服务器 3.锚点
- 协议部分:http,表示网页部分用的是http协议,后面//为分隔符
- 域名部分:www.fishbay.cn,发送请求时,需要向DNS服务器解析IP,如果为了优化请求,可以直接用IP作为域名部分使用
- 端口部分:80,和域名之间用:分隔,不是一个URL的必须部分,如果端口80,也可以省略不写
- 虚拟目录部分:从域名的第一个/开始到最后一个/为止,不是URL的必须部分,本例中的虚拟目录是/mix/
- 文件名部分:从域名的第一个/开始到?为止,如果没有?则从域名最后一个/开始到#为止,是文件名76.html,不是URL的必须部分,如果没有文件名,则使用默认文件名
- 锚部分:从#开始到最后,本部分锚是first,不是URL的必须部分
- 参数部分:从?开始到#为止之间的部分,又称搜索部分、查询部分,本例中的参数是name=kelvin&password=123456,如果有多个参数,各个参数之间用&作为分隔符
- 工作原理:http协议采用请求/响应模式,客户端向服务器发送一个请求报文,然后服务器响应请求
请求过程:
- 在浏览器中输入URL
- 浏览器向DNS服务器请求解析该URL中的域名对应的IP地址(如果IP请求,则不需要此步骤)
- 解析出IP后,根据IP和端口号,和服务器建立TCP连接
- 浏览器向服务器发送请求,该请求报文作为TCP三次握手的第三个报文发送给服务器
- 服务器作出响应,把数据发送给浏览器
- 通信完成,断开TCP连接
- 浏览器解析收到的数据并显示
- HTTP请求报文结构:三部分组成(请求行,请求头,请求体)
报文结构解剖
- 请求方法,GET和POST是最常见的HTTP方法,多数浏览器支持
- 请求URL,它和报文的Host属性组成完整的请求URL
- HTTP协议名称及版本号
- HTTP的报文头,包含若干个属性,格式为”属性名:属性值”,服务端据此获取客户端的信息
- HTTP的报文体,它将一个页面单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据,不但报文体可以传递请求参数,请求URL也可以通过类似于”/chapter15/user.html?param1=value1¶m2=value2”的方式传递请求参数
- 最常见的两种HTTP方法
- GET方法:不提交大量的数据,无敏感、保密数据时使用
- 超级链接访问,默认GET方法
- Form提交,不指定method,默认GET方法
Form提交,指定method=”GET”,很少使用
- POST方法:需要提交敏感、保密数据或数据量较大
- Form提交,指定method=”POST”
- HTTP请求:GET方式
- HTTP请求:POST方式
- HTTP响应
- HTTP响应报文结构:三部分组成(响应行,响应头,响应体)
报文结构解剖
- 报文协议及版本
- 状态码及状态描述
- 响应报文头,也是由多个属性组成
- 响应报文体,即我们真正要的”干货”
和请求报文相比,响应报文多了一个”响应状态码”,它以”清晰明确”的语言告诉客户端本次请求的处理结果
HTTP响应状态由5段组成:
- 1xx消息,一般是告诉客户端,请求已经收到了,正在处理
- 2xx处理成功,一般表示:请求知悉等信息
- 3xx重定到其他地方,它让客户端再发起一个请求以完成整个处理
- 4xx处理发送错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
- 5xx处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等
- 以下几个常见的状态码
- 200 OK:处理成功!
- 400:请求语法错误,服务器无法理解
- 403:服务器收到请求,但拒绝提供服务
- 404:你最不希望看到的,即找不到页面
- 500:服务器内部错误
- 503:服务器当前不能处理客户端请求,可能需要一段时间后才能恢复正常
- HTTP协议