HTTP协议
HTTP协议
超文本传输协议,是用于从www服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层上,这个就是HTTPS协议。
TLS(Transport Layer Security)
传输层安全协议,用于两个应用程序之间提供保密性和数据完整性,该协议由两层协议组成,分别是TLS记录协议和TLS握手协议。
SSL(Security Socket Layer)
安全套接字层,用于可靠的面向连接的网络层和应用层协议之间的协议层,通过互相认证、数字签名确保完整性,使用加密确保私密性,保证了服务器和客户端之间安全的数据通信。由SSL记录协议和SSL握手协议组成。
HTTP的端口号为80,HTTPS的端口号为443。
HTTP的请求响应模型
HTTP协议永远都是客户端发起请求,服务器回送响应。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
工作流程
①首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
②建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
③服务器接到请求后,给予相应的响应信息,其格式是一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
④客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
头域
每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
host头域
Host头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。HTTP/1.1请求包含主机头域,否则系统会以400状态码返回。
HTTP请求消息
请求消息格式
请求行
通用信息头|请求头|实体头
CRLF(回车换行)
实体内容
其中“请求行”为:请求行 = 方法 [空格] 请求URI[空格] 版本号 [回车换行]
例子1
GET /index.html HTTP/1.1
例子2
POST http://192.168.2.217:8080/index.jsp HTTP/1.1
请求方法
GET 申请获取资源,而不对服务器产生任何其他影响
HEAD 和GET方法类似,不过仅要求服务器返回头部信息,而不需要传输任何实际内容
POST 客户端向服务器提交数据的方法。这种方法会影响服务器:服务器可能会根据收到的数据动态创建新的资源,也可能更新原有的资源。
PUT 上传某个资源
DELETE 删除某个资源
TRACE 要求目标服务器返回原始HTTP请求的内容,它可用来查看中间服务器(比如代理服务器)对HTTP请求的影响
OPTIONS 查看服务器对某个特定URL都支持哪些请求方法。也可以把URL设置为*,从而获得服务器支持的所有请求方法
CONNECT 用于某些代理服务器,它们能把请求的连接转化为一个安全隧道
PATCH 对某个资源做部分修改。
HTTP应答
响应消息格式
状态行
通用信息头|响应头|实体头
CRLF
实体内容
其中:状态行 = 版本号 [空格] 状态码 [空格] 原因 [回车换行]
例子1
HTTP/1.0 200 OK
例子2
HTTP/1.1 400 Bad Request
状态响应码
1**:请求收到,继续处理
100—客户必须继续发出请求
101—客户要求服务器根据请求转换HTTP协议版本
2**:操作成功收到,分析、接受
200—交易成功
201—提示知道新文件的URL
202—接受和处理、但处理未完成
203—返回信息不确定或不完整
204—请求收到,但返回信息为空
205—服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206—服务器已经完成了部分用户的GET请求
3**:完成此请求必须进一步处理
300—请求的资源可在多处得到
301—删除请求数据
302—在其他地址发现了请求数据
303—建议客户访问其他URL或访问方式
304—客户端已经执行了GET,但文件未变化
305—请求的资源必须为从服务器指定的地址得到
306—前一版本HTTP中使用的代码,现行版本中不再使用
307—声明请求的资源临时性删除
4**:请求包含一个错误语法或不能完成
400—错误请求,如语法错误
401—未授权
402—保留有效ChargeTo头响应
403—禁止访问
404—没有发现文件、查询或URL
405—用户在Request-line字段定义的方法不允许
407—客户端需要先获得代理服务器的认证
5**:服务器执行一个完全有效请求失败
500—内部服务器错误
501—未实现
502—网关错误
503—暂时无法访问服务器