1.关于HTTP协议
HTTP协议(HyperText Transfer Protocol)及超文本传输协议。首先要明白HTTP是基于TCP的协议,先建立好TCP连接,才能发送HTTP请求。并且1.1版本默认开启Keep-Alive,这样建立的TCP连接可以在多次请求中复用。还要明白HTTP是无状态有会话的,使用Cookies可以创建有状态的会话。在请求头方面1.1版本增加更多的请求头和响应头信息用以增强HTTP的功能例如host主机头。
2.HTTP的请求报文
HTTP的请求报文主要由请求行,请求头(请求首部),请求数据(正文主体)组成。
第一部分:请求行
| 请求行字段 | 说明 | 其它 |
| ---------------- | --------------- --------------- | ------------------------------------------------------------ |
| GET(RequestMethod) | 通常用于请求服务端上的某个资源 | 比如GET请求一个基于HTTP的API接口获得JSON字符串,字符串里面是一个列表,列表中包含你想要获取的信息 |
| POST(RequestMethod) | 主动告诉服务端一些信息,将客户端的信息提交到服务端 | 比如POST请求一个基于HTTP的API接口,提交想要提交的信息 |
| PUT(RequestMethod) | 向指定的资源位置上传最新的信息 | 暂无 |
| DELETE(RequestMethod) | 请求服务端删除Request-URI指定的资源 | 暂无 |
| URL | 统一资源定位符 | 要获取的资源的准确路径,由协议,主机IP或域名端口号, 具体目录地址构成 |
| 协议版本 | HTTP协议的版本号 | 比如HTTP/1.1 |
第二部分:请求头
请求头常见字段 | 说明 |
---|---|
Host | 告知服务端,请求的资源所在的互联网主机名和端口号 |
User-Agent | 会将创建请求的的浏览器和用户代理名称传递给服务端 |
Accept | 用来告知服务端,用户代理所支持的能够处理的流媒体的类型以及相对优先级 |
Accept-Encoding | 用来告知服务端,用户代理所支持的内容编码以及优先顺序 |
Accept-Language | 用来告诉服务端,用户能够处理的自然语言集 |
If-Modified-Since | 告知服务端若If-Modified-Since字段的值早于资源更新时间则希望服务端处理该请求,反之返回304 Not Modified |
Accept-Charset | 优先的字符集 |
第三部分:请求数据
常见字段 | 说明 |
---|---|
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体使用的编码格式 |
Content-Language | 实体使用的自然语言 |
Content-Length | 实体的大小 |
Content-Location | 替代对应资源的URL |
Content-MD5 | 实体的报文摘要 |
Content-Range | 实体的位置范围 |
Content-Type | 实体的媒体类型 |
Expires | 实体主体的过期时间 |
Last-Modified | 资源的最后修改时间 |
3.HTTP的响应报文
HTTP响应报文主要由状态行,响应首部,响应数据(正文实体)。
第一部分:状态行
状态行主要包含协议的版本号,状态返回码,状态信息。
常见的HTTP状态返回码 | 对应的状态信息 | 说明 | 其它 |
---|---|---|---|
200 | OK | 请求成功 | 对成功的定义取决于HTTP的请求方法 |
301 | Moved Permanently | 永久移动,被请求的资源永久的移动到了新的URL | 永久跳转 |
304 | Not Modified | 客户端所请求的资源未修改,服务器返回此状态码 | 暂无 |
400 | Bad Request | 客户端请求错误,服务器无法理解 | 语义有误或者请求参数有误 |
401 | Unauthorized | 当前请求需要用户进行身份验证 | 暂无 |
402 | Payment Required | 保留 | 暂无 |
403 | Forbidden | 服务器理解了客户端的请求,但是拒绝执行它 | 有可能是服务器或服务的权限设置不当 |
404 | Not Found | 请求失败,服务器无法根据客户端的请求找到相应资源 | 有可能是客户端请求了服务器上不存在的资源或者路径没写准确 |
500 | Internal Server Error | 服务器内部错误 | 服务器遇到了不知道如何处理的情况,可能是服务器的设置或者内部程序的问题 |
501 | Not Implemented | 服务器不支持客户端的请求方法 | 暂无 |
502 | Bad Gateway | 作为网关或代理的服务器尝试请求时,从远端获取到一个无效的响应 | 可能是反向代理服务器下面的节点出问题 |
503 | Service Unavailable | 服务器由于超载或维护,暂时无法处理客户端的请求 ,不可用 | 也可能是反向代理服务器后面没有可以提供服务的节点 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 | 可能是反向代理服务器后面的服务器过载导致没有在指定的时间内返回数据 |
第二部分:响应首部
常见首部字段 | 说明 |
---|---|
ETag | 资源的匹配信息 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
第三部分:正文实体
正文实体的首部字段可以参考HTTP请求报文中的正文实体首部
还有一些通用的首部字段如下
字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部,连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Upgrade | 升级为其它协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
3.补充说明
关于状态码
204:成功处理请求但是响应报文不包含实体的主体部分。
206:通过发送范围请求头Range抓取到了资源的部分数据。(partial content)
301:永久重定向,永久跳转。
302:临时重定向,临时跳转。
304:服务端只返回响应头。
400:请求的报文中存在错误。
401:求需要认证或认证失败导致。
403:可能是访问了没有权限的资源导致的禁止访问。
404:访问路径错误或访问的资源已经不存在,服务器找不到客户端请求的指定页面。
412:客户端请求的etag和服务端的不一致。
416:所请求的范围无法满足。
499:服务器主动关闭客户端连接。
500:内部服务器错误,一般是服务器的设置或内部程序错误导致。
502:坏的网关,一般是代理服务器请求后端时后端服务不可用或没有完成响应导致的。
503:当前服务不可用,可能是服务器超载或停机或反向代理服务器后端无可用服务器。
504:网关超时一般是后端服务器没有在指定的时间完成处理请求。
网友评论