参考:
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.响应报文=响应行+响应头+响应体
Http响应报文
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 |
细想从来,断肠多处,不与今番同