参考:
HTTP协议详解 https://www.jianshu.com/p/dac7b8bdb682
HTTP请求方法GET和POST http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
一.HTTP(超文本传输)协议
- TCP/IP协议栈中应用层协议,基于TCP实现,TCP负责可靠的内容传输,HTTP负责识别内容
- HTTP是无状态协议,每次的内容解析没有关联。TCP是有状态协议,客户端和服务器通过TCP协议通讯时需建立连接
- HTTP包含客户端向服务器发送请求时发送的请求报文,及服务器响应客户端时发送的响应报文
二.HTTP请求报文
1.请求报文 = 请求行(request) + 请求头(header) + 请求体
- HTTP请求消息体结构如下
- HTTP请求报文实例如下
2.HTTP请求方法
- 请求方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | HEAD | 类似于GET请求,但返回的响应中没有具体内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源建立和/或已有资源的修改 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
5 | DELETE | 请求服务器删除指定的页面 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能 |
8 | TRACE | 回显服务器收到的请求,主要用于测试和诊断 |
- GET方法和POST方法比较
1)GET用于客户端向服务器获取信息,是安全的和幂等的。安全意味着GET仅用于获取信息而非修改信息;幂等意味着对同一个URL的多个请求返回同样的结果
2)POST用于客户端向服务器提交信息,提交后可能改变服务器上已有的资源
3)GET与POST现象层面的区别见下表
序号 | 内容 | GET | POST |
---|---|---|---|
1 | 请求数据位置 | 拼接在URL后 | HTTP请求体中 |
2 | 请求数据长度限制 | 浏览器/操作系统限制 | 无限制 |
3 | 安全性 | 较低(URL明文) | 较高 |
3.请求头参数
见下文
三.HTTP响应报文
1.响应报文=响应行+响应头+响应体
2.响应行
- 响应行包含了Http的协议版本和本次请求的状态(状态码)
- 状态码分类
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
- 常见状态码
状态码 | 名称 | 含义 |
---|---|---|
200 | OK | 服务器已成功处理请求 |
204 | No Content | 服务器已成功处理请求,但返回的响应报文不含且不允许返回任何实体的主体 |
206 | Partial Content | 服务器成功执行了客户端发送的范围请求 |
301 | Moved Permanently 永久性重定向 | 请求的资源已永久被分配了新URI |
302 | Found 临时性重定向 | 请求的资源已临时被分配了新URI |
303 | See Other | 由于对应的资源存在另一个URI,所以应使用Get方法定向获取请求的资源 |
304 | Not Modified | 客户端发送附带条件的请求时,服务器允许请求访问资源,但未满足附带条件 |
400 | Bad Request | 请求报文存在语法错误,需修改请求的内容后再次发送 |
401 | Unauthorized | 表示发送的请求需要有通过HTTP认证的认证信息 |
403 | Forbidden | 服务器拒绝请求访问服务器资源 |
404 | Not Found | 服务器上无法找到请求的资源,也可在服务器拒绝请求且不想说明理由时使用 |
500 | Internal Server Error | 服务器在执行请求时发生了错误 |
503 | Service Unavailable | 服务器处于超负载或停机维护,暂无法处理请求 |
- 响应头参数
见下文
四.HTTP报文
1.报文实例
2.请求头参数
Header | 解释 | 示例 |
---|---|---|
Accept | 指定客户端能够接受的内容类型 | Accept:text/plain,text/html |
Accept-Charset | 浏览器可以接受的字符编码集 | Accept-Charset:iso-8859-5 |
Accept-Encoding | 浏览器可以支持的web服务器返回内容压缩编码类型 | Accept-Encoding:compress,gzip |
Accept-Language | 浏览器可以接受的语言 | Accept-Language:en,zh |
Cache-Control | 指定请求和响应遵循的缓存机制 | Cache-Control:no-cache |
Connection | 表示是否需要持久连接 | Connection:close |
Cookie | HTTP发送请求时,会发送保存在该请求域名下的所有cookie值 | Cookie:$Version=1;Skin=new; |
Content-Length | 请求的内容长度 | Content-Length:348 |
Content-Type | 请求的与实体对应的MIME信息 | Content-Type:application/x-www-form-urlencoded |
Date | 请求发送的日期和时间 | Date:Tue,15 Nov 2018 08:23:53 GMT |
Expect | 请求的特定服务器行为 | Expect: 100-continue |
Host | 请求的服务器域名和端口号 | Host: www.zcmhi.com |
Max-Forwards | 限制信息通过代理和网关传送的时间 | Max-Forwards:10 |
Range | 只请求实体指定范围的一部分 | Range:bytes=500-999 |
Referer | 先前网页的地址(当前请求的来路) | Referer:https://www.jianshu.com/p/dc28f2172878 |
User-Agent | 发出请求的用户信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
Warning | 关于消息实体的警告信息 | Warn: 199 Miscellaneous warning |
3.响应头参数
Header | 解释 | 示例 |
---|---|---|
Accept-Ranges | 服务器是否支持指定范围请求及哪种类型的范围请求 | Accept-Ranges:bytes |
Age | 从原始服务器到代理缓存形成的估算时间(单位秒,非负) | Age:12 |
Allow | 对某网络资源的有效的请求行为,不允许请求则返回405 | Allow:Get,HEAD |
Cache-Control | 告诉所有的缓存机制是否可以缓存及可缓存类型 | Cache-Control:no-cache |
Content-Encoding | web服务器支持的返回内容压缩编码类型 | Content-Encoding:gzip |
Content-Language | 响应体语言 | Content-Language:en,zh |
Content-Length | 响应体长度 | Content-Length:348 |
Content-Location | 请求资源可替代的备用地址 | Content-Location:/index.htm |
Content-MD5 | 返回资源的MD5校验值 | Content-MD5:Q2hlY2sgSW50ZWdyaXR5IQ== |
Content-Range | 整个返回体中本部分的字节位置 | Content-Range: bytes 21010-47021/47022 |
Content-Type | 返回内容的MIME类型 | Content-Type: text/html; charset=utf-8 |
Date | 原始服务器消息发出时间 | Date: Tue, 15 Nov 2018 08:12:31 GMT |
Expires | 响应过期的日期和时间 | Expires: Thu, 01 Dec 2010 16:00:00 GMT |
Last-Modified | 请求资源的最后修改时间 | Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT |
Location | 重定向接收方到非请求URL的位置 | Location:https://www.jianshu.com/p/e50f77f8244e |
Proxy-Authenticate | 确定认证方案和可应用到代理的该URL上的参数 | Proxy-Authenticate:Basic |
refresh | 一定时间后重定向 | Refresh: 5; url=https://www.jianshu.com/p/e50f77f8244e |
Retry-After | 若实体暂时不可取,通知客户端在指定时间后再试 | Retry-After:120 |
Server | web服务器软件名称 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
Set-Cookie | 设置Cookie | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
Transfer-Encoding | 文件传输编码 | Transfer-Encoding:chunked |
Vary | 是使用缓存响应还是从原始服务器请求 | Vary: * |
Warning | 警告实体可能存在的问题 | Warning: 199 Miscellaneous warning |
细想从来,断肠多处,不与今番同