start:2020年8月2日
一、前言:
对于协议这个概念,我想起了我小的时候与小伙伴们干过的一件事 —— 对暗号,我们提前预定好暗号的前半句和后半句(床前明月光,地上鞋两双...),然后如果我今天下午放学后想约小伙伴一起去打弹珠玩的话,那么我就会说出暗号的前半句,然后如果可以去玩的小伙伴就会说出后半句,这样我就知道哪些人放学后可以一起玩了。
说回来,其实HTTP协议也是如此,它是客户端与服务器之间的通信协议,也是他们想要干某些事共同认可的“暗号”。
二、What is HTTP?
- 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
- HTTP是一种客户端与服务器的通信协议(暗号)
三、工作位置:
HTTP主要应用于TCP/IP中的应用层
四、工作流程:
客户端根据用户需求向服务器发起请求,服务器接收到请求后对请求进行分析,然后进行对应的处理,之后服务器将处理后的结果响应回客户端,最后客户端拿到响应结果后展示给用户看。
五、请求方式:
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
序号 | 方法 | 简介 |
1 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。 |
2 | GET | 请求指定的页面信息,并返回实体主体。 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
六、响应码(引用逐梦):
HTTP响应码,也称http状态码(HTTP Status Code),反映了web服务器处理HTTP请求状态,每一个响应码都代表了一种服务端反馈的响应状态,标识了本次请求是否成功。我们应该了解常见的响应码代表的状态,通过响应码能够对错误进行排查和定位。
表示收到http请求,正在进行下一步处理,通常是一种瞬间的响应状态
100 (Continue):信息型状态响应码表示目前为止一切正常, 客户端应该继续请求, 如果已完成请求则忽略
101 (Switching Protocol):状态码表示服务器应客户端升级协议的请求(Upgrade请求头)正在进行协议切换。
表示用户请求被正确接收、理解和处理
200(OK):请求成功。一般用于GET与POST请求
201(Created):已创建。成功请求并创建了新的资源
202(Accepted):表示服务器端已经收到请求消息,但是尚未进行处理。但是对于请求的处理确实无保证的,即稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。这个状态码被设计用来将请求交由另外一个进程或者服务器来进行处理,或者是对请求进行批处理的情形。
表示没有请求成功,必须采取进一步的动作
301(Moved Permanently):资源被永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI
302(Found):资源临时移动。资源只是临时被移动,客户端应继续使用原有URI
304:用其他策略获取资源
表示客户端提交的请求包含语法错误或不能正确执行
400(Bad Requests):客户端请求的地址不存在或者包含不支持的参数
401(Unauthorized):未授权,或认证失败。对于需要登录的网页,服务器可能返回此响应
403(Forbidden):没权限。服务器收到请求,但拒绝提供服务
404(Not Found):请求的资源不存在。遇到404首先检查请求url是否正确
表示服务器不能正确执行一个正确的请求(客户端请求的方法及参数是正确的,服务端不能正确执行,如网络超时、服务僵死,可以查看服务端日志再进一步解决)
500(Internal Server Error):服务器内部错误,无法完成请求
503(Service Unavailable):由于超载或系统维护(一般是访问人数过多),服务器无法处理客户端的请求 ,通常这只是暂时状态
七、HTTP的特性(不保存状态):
- HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。
八、请求格式(引用浪子回头):
- 请求行
- 请求头
- 空行
- 请求体
请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
● User-Agent:产生请求的浏览器类型;
● Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ */* ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;
● Accept-Language:客户端可接受的自然语言;
● Accept-Encoding:客户端可接受的编码压缩格式;
● Accept-Charset:可接受的应答的字符集;
● Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;
● connection:连接方式(close 或 keepalive);
● Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
九、响应格式(引用浪子回头):
- 响应行
- 响应头
- 空行
- 响应体
响应头部:响应头可能包括:
- Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;
- Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。
- Vary:指示不可缓存的请求头列表;
- Connection:连接方式;
- 对于请求来说:close(告诉 Web服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);
- 对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;
- WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;
十、总结:
1.http请求格式与响应格式的结构是一样的:
- 行
- 头
- 空行
- 体
2.http请求是一次性的,如果本次请求失败了,则需要发起新的请求
end:by take