HTTP协议详解
一、http协议概念
1.1.http协议的重要性
什么是http协议:大家商议好的共同认可的结果
规定了浏览器与服务端之间数据交互的方式及其他事项
如果我们开发的时候不遵循该协议 那么浏览器就无法识别我们的网站
- webservice=http+xml
- rest=http+json
- api=http+xml+json
1.2.http协议工作流程
- 初始状态客户端和服务器没有关系
- 建立连接,发送请求
连接:管道(虚拟电路)
客户端按照一定规则向服务器要数据或发送数据
客户端:浏览器,telnet
安装telnet:npm install telnet- 沿着连接,返回响应信息
服务器按照一定规则向客户端回应数据,解析html代码、图片文字
web服务器:apache,nginx,iis- 断开连接
1.3.http请求的四大特性
基于请求响应
- 服务端永远不会主动给客户端发消息 必须是客户端先发请求
- 如果想让服务端主动给客户端发送消息可以采用其他网络协议
基于请求响应
- 应用层(HTTP)、传输层、网络层、数据链路层、物理链接层
应用层(HTTP)、传输层、网络层、数据链路层、物理链接层
- 不保存客户端的状态信息,早期的网站不需要用户注册 所有人访问的网页数据都是一样的
无连接/短连接
- 两者请求响应之后立刻断绝关系
1.4.http请求消息和响应信息的格式
1.4.1.get请求
请求行:请求方法 请求路径 协议版本
- get /demo/01.php HTTP/1.1
- 请求方法:get/post/head/put/delete/trace/options
- 请求路径(资源):/demo/01.php
- 协议版本:HTTP/1.1(1.0和0.9版本基本不使用了)
请求头信息:结束 标志是一个空行,有没有头信息和主体信息都需要这个空行做区分
- Host:localhost
请求主体信息:要发送的内容(可选)
响应行:协议版本 状态码 状态文字
- HTTP/1.1 200 ok
响应头信息:以key:value的形式,结束标志是一个空行
- Date:Thu,06 Jun 2013 12:39:02 CMT
- Content-Length:5,主体长度
- Content-Type:text/html ,主体类型
响应主体信息:返回的内容(也可能没有)
1.4.2.post请求
二、http协议方法与状态码
2.1.协议请求方法
GET / POST / HEAD / PUT /PATCH/ DELETE / TRACE / OPTIONS
- GET(数据库SELECT) :从服务器取出资源(一项或多项)
- POST(数据库CREATE):在服务器新建一个资源
- HEAD :获取资源的元数据
与get类似,但只返回响应头信息,不返回响应主体信息
使用场景:只想确认一个内容(如照片)是否正常存在,不需要返回内容以下请求虽然在HTTP协议规定了,但web server未必允许或支持
- PUT(数据库UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
- PATCH(数据库UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
- DELETE(数据库DELETE):从服务器删除资源
- TRACE:看使用代理时代理有没有修改你的HTTP请求
- OPTIONS:返回服务器可用的请求方法
获取信息,关于资源的哪些属性是客户端可以改变的
2.2.协议状态码与状态文字
状态码:反应服务器响应情况
- 1XX:服务器收到请求,可以等待,也可以继续处理
- 2XX:请求成功
200:成功,服务端返回了相应的数据- 3XX:重定向,为了完成请求必须采取的进一步措施
301:永久重定向,配合location 浏览器自动处理,适用于域名到期,浏览器不会访问老的域名
302:临时重定向,配合location 浏览器自动处理 ,下次会再次访问老的域名;可以控制和拦截,可以做统计
304:资源未被修改,资源在本地缓存中有效,不需要重新请求
Not Modified,并不是服务器不知道客户端有没有缓存,而是客户端告诉服务器我有这个图片,通过时间戳信息If-Modified-Since或If-None-Match,如果更改过,就要重新请求网页,响应头中有一个ETag来表示网页有没有被修改
307:内部重定向,重定向中保持原有的数据请求,在form表单提交时,如果使用301/302可能会导致数据丢失,因为post提交,重定向后变成get请求了,如果使用307,会有post提交,post请求,就不会导致数据丢失了- 4XX:客户端错误,请求语法有错误或不能完全被满足
400:客户端错误
403:找不到主页,没有权限访问
404:NOT FOUND,请求的资源未找到- 5XX:服务器错误,服务器无法完成明显有效的请求
500:服务器内部错误(后端主机超时)
502:找不到后端主机
503:服务器过载
504:网关超时- 自定义状态码
状态文字:描述状态码,便于观察错误信息