HTTP协议
HTTP协议是HyperText Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP协议和html前面的ht都是超文本的意思,所以HTTP与html是配合非常紧密的一对,我们可以认为HTTP就是为了传输html这样的文件,HTTP位于应用层,侧重于解释.
HTTP协议对消息区分可以分为请求消息和响应消息。
请求消息
我们要开发的服务器与浏览器通信采用的就是HTTP协议,在浏览器想访问一个资源的时候,在浏览器输入访问地址(例如http://127.0.0.1:8000),地址输入完成后当敲击回车键的时候,浏览器就将请求消息发送给服务器
我们可以先用测试工具创建一个socket服务器
之后通过浏览器请求地址,就会看到浏览器发送过来的请求消息
这个消息看起来很乱很复杂,对应的就是我们说的请求消息.
请求消息分为四部分内容:
- 请求行 说明请求类型,要访问的资源,以及使用的HTTP版本
- 请求头 说明服务器使用的附加信息,都是键值对,比如表明浏览器类型
- 空行 不能省略-而且是\r\n,包括请求行和请求头都是以\r\n结尾
- 请求数据 表明请求的特定数据内容,可以省略-如登陆时,会将用户名和密码内容作为请求数据
请求类型
HTTP协议有很多种请求类型,对我们来说常见的用的最多的是get和post请求。常见的请求类型如下:
- Get 请求指定的页面信息,并返回实体主体
- Post 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
- Head 类似于get请求,但是响应消息没有内容,只是获得报头
- Put 从客户端向浏览器传送的数据取代指定的文档内容
- Delete 请求服务器删除指定的页面
- Connect HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- Options 允许客户端查看浏览器的性能
- Trace 回显服务器收到的请求,主要用于测试和诊断
get 和 post 请求都是请求资源,而且都会提交数据,如果提交密码信息用get请求,就会明文显示,而post则不会显示出涉密信息.
响应消息
响应消息是代表服务器收到请求消息后,给浏览器做的反馈,所以响应消息是服务器发送给浏览器的,响应消息也分为四部分:
- 状态行 包括HTTP版本号,状态码,状态信息
- 消息报头 说明客户端要使用的一些附加信息,也是键值对
- 空行 \r\n 同样不能省略
- 响应正文 服务器返回给客户端的文本信息
示例:
常见状态码
HTTP状态码由三位数字组成,第一个数字代表响应的类别,有五种分类:
- 1xx 指示信息--表示请求已接收,继续处理
- 2xx 成功--表示请求已被成功接收、理解、接受
- 3xx 重定向--要完成请求必须进行更进一步的操作
- 4xx 客户端错误--请求有语法错误或请求无法实现
- 5xx 服务器端错误--服务器未能实现合法的请求
常见的状态码如下:
- 200 OK 客户端请求成功
- 301 Moved Permanently 重定向
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务
- 404 Not Found 请求资源不存在,eg:输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误
- 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
常见文件类型分类
HTTP与浏览器交互时,为使浏览器能够识别文件信息,所以需要传递文件类型,这也是响应消息必填项,常见的类型如下:
- 普通文件: text/plain; charset=utf-8
- *.html: text/html; charset=utf-8
- *.jpg: image/jpeg
- *.gif: image/gif
- *.png: image/png
- *.wav: audio/wav
- *.avi: video/x-msvideo
- *.mov: video/quicktime
- *.mp3: audio/mpeg
特别说明
- charset=iso-8859-1 西欧的编码,说明网站采用的编码是英文;
- charset=gb2312 说明网站采用的编码是简体中文;
- charset=utf-8 代表世界通用的语言编码;可以用到中文、韩文、日文等世界上所有语言编码上
- charset=euc-kr 说明网站采用的编码是韩文;
- charset=big5 说明网站采用的编码是繁体中文;
RESTful
通常被称为 REST(Representational State Transfer),是一种软件架构风格,用于设计网络应用程序。它基于HTTP协议,并遵循一组设计原则和约束,以实现可伸缩的、灵活的网络服务。
REST 的设计理念是:
- 资源:网络上的每个实体都是一个资源。资源可以是一个文档、一个人、一个事件等。
- 表现形式(Representations):资源的某个具体状态可以通过不同的表现形式来表示。例如,一个人的资源可以通过文本、图片或其他任何形式来表示。
- 状态转移(State Transfer):客户端通过发送请求到服务端,请求可能会改变服务端的状态(例如,创建新的资源,更新资源状态,读取资源状态等)。
RESTful 应用程序的典型特征包括:
- 使用 HTTP方法(如GET、POST、PUT、DELETE)来操作数据。
- 通过 URL(统一资源定位符)来表示资源的地址。
- 使用 标准数据格式(如JSON或XML)来描述资源的表现形式。
- 分离 客户端和服务器端状态,以便每个请求可以独立完成操作。
- 无状态的设计,每次请求都包含必要的信息,不依赖于之前的请求(这有助于实现高可伸缩性)。
- 超媒体作为自描述的指南,在响应中包含链接,以此作为导航的指南。
RESTful 设计原则通常用于创建现代网络上通信的 Web 服务和 API。由于其无状态性和分层架构,RESTful API 适合处理高并发请求,并且可以通过缓存和代理来改善性能和扩展性。