Http协议
饮水思源
http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html
http://tools.jb51.net/table/http_header
http://www.cnblogs.com/zh2000g/archive/2010/03/22/1692002.html
http://blog.csdn.net/blue_it/article/details/43311551
Desc
HTTP(Hyper Text Transfer Protocol 超文本传输协议), 是基于 TCP/IP 协议的 一种协议 属于 网络分层中
应用层
的协议,是互联网中通信的基础,是一种请求--响应
的模式 ,客户端请求具体的资源,服务器做出响应。这个请求可以是非常简单也可以是非常的复杂。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
HTTP请求的步骤
- 建立TCP连接
- Web浏览器发送请求命令
- Web浏览器发送请求头信息
- Web服务器响应
- Web服务器发送响应头信息
- Web服务器向浏览器发送数据
- 关闭TCP连接
Http 请求
当浏览器向Web服务器发送出请求的时候,服务器传递了一个数据块,即急钮信息, HTTP请求由3部分组成:
- 请求方法 URL地址 HTTP协议和版本
- 请求头
- 请求正文
分析
这里以我的博客园主页的一个请求为例子 鲁迅认识的那只猹,使用的浏览器为火狐浏览器,使用了FireBug工具
//请求方法
GET /slyfox/ HTTP/1.1
//请求头
Host: www.cnblogs.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: .CNBlogsCookie=F60A94A4CE998B3322717EB5B2C99CE088EA357989C1EFD3A5F46E230C27441E649730A6522A871CB646BE18E4CCFA8E83BB24C7E5505148F76D98A075A418536FEC9B1326D627E07E48F5A9267190C5F3311057; .Cnblogs.AspNetCore.Cookies=CfDJ8PhlBN8IFxtHhqIV3s0LCDkqsd4hqGtzJYBuOTb5g9DKOWTazZmJWGuePXDhXNQzqFZ7ENGsSoFF5qAy2mgcCKh2oUfCxAtwi0FKBnEmZFaAAGg7dVjjh6zq0wt2BIynSdiu4UgPfmDFdxIoAMWwVjNpH8sesv2D8feX7MjVjuna74-JJdxi7O1sldVGluUPtMkzB5nIojOvJwtsHiNTcg9vtWNfF1S362PbpsJLvNTJInWl_7cLs9bi1Tj8-I9Y5lDsFztOtc85QKdDNqoyKX0GrpFLt3sXa04Z7GWBqJjYzV1FpRjeOd2knpMjF22kcg
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Thu, 03 Aug 2017 08:11:01 GMT
Cache-Control: max-age=0
//请求正文 请求头和 请求正文之间 会有一个空行,服务器拿到了该空行后表示请求头结束。
请求方法
GET /slyfox/ HTTP/1.1
GET 请求的方法
GET 是HTTP协议的一种请求方法, HTTP协议常用的请求方法为
GET
、POST
、PUT
、DELETE
等
/slyfox 代表请求的URL的路径
URL完整的指出了想要访问的资源,通常使用相对目录。
/ HTTP/1.1 HTTP的版本
本次通信中使用HTTP的版本
请求头
请求头中包含的是客户端的数据格式为 属性名:属性值
Host: www.cnblogs.com
指定请求服务器的域名与端口号
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
User-Agent 想服务器 提供客户端所使用的 浏览器的类型和版本、系统版本、浏览器内核等信息
- Mozilla/5.0 浏览器的名称
- (Windows NT 10.0; WOW64; rv:54.0) 操作系统信息
- Gecko/20100101 Firefox/54.0 浏览器内核信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
指定客户端能够接收的内容类型,标识浏览器支持的MIME类型(Multipurpose Internet Mail Extensions 多功能 Internet 邮件扩充服务)。
格式为 类型/子类型 如果 text/html text 是一个传输的类型 html 是 text类型下的子类型
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
浏览器支持的语言类型,从左向右依次优先 q代表权重 0-1 0 代表不支持. 如果不写默认为0.
Accept-Encoding: gzip, deflate
指定浏览器可以支持的web服务器返回内容压缩编码类型。
Cookie:.CNBlogsCookie=F60A94A4CE998B3322717EB5B2C99CE088......
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。..比如说我们的保存的账号密码等等
Connection: keep-alive
TCP连接的类型,表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
keep-alive 表示 进行持久连接,减少多次请求时的资源浪费
Upgrade-Insecure-Requests: 1
告诉浏览器可以将HTTP请求自动升级到HTTPS请求。
If-Modified-Since: Thu, 03 Aug 2017 08:11:01 GMT
发送本地缓存的最新事件,服务端会进行比价,如果相同就会直接显示缓存的内容,否则从服务器获取,从重新缓存。
Cache-Control: max-age=0
指定请求和响应遵循的缓存机制,常见的取值有private、no- cache、max-age、must-revalidate等 ,默认取值为 private 每次刷新网页都会重新访问服务器.
例子 max-age=5 标识5秒内再次刷新不会访问服务器。
HTTP响应
HTTP的响应和HTTP的请求详细,由三部分组成
- HTTP协议版本 代码描述
- 响应头
- 响应正文
分析
//HTTP 协议 和 响应代码
HTTP/1.1 200 OK
//响应头
Date: Thu, 03 Aug 2017 11:55:58 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: private, max-age=10
Expires: Thu, 03 Aug 2017 11:56:08 GMT
Last-Modified: Thu, 03 Aug 2017 11:55:58 GMT
X-UA-Compatible: IE=10
X-Frame-Options: SAMEORIGIN
Content-Encoding: gzip
//响应正文
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>鲁迅认识的那只猹 - 博客园</title>
<!--
各种html代码
-->
<!--done-->
Copyright ©2017 鲁迅认识的那只猹
</div><!--end: footer -->
</div><!--end: home 自定义的最大容器 -->
</body>
</html>
响应代码
HTTP/1.1 200 OK
代表 HTTP的版本 和 响应码
- 1xx 信息类 表示接收到web浏览器的请求 正在进一步处理
- 2xx 成功类 标识用户请求被正确接收,和处理 常见的 200 OK
- 3xx 冲定向类 标识请求没有成功,客户必须采取进一步的动作
- 4xx 客户端错误 标识客户端提交了错误的请求 如 404 代码 资源不存在
- 5xx 服务器错误 标识服务器不能对请求 例如 500
响应头
Date: Thu, 03 Aug 2017 11:55:58 GMT
原始服务器消息发出的时间
Content-Type: text/html; charset=utf-8
返回的MIME类型
Transfer-Encoding: chunked
文件传输编码
Connection: keep-alive
连接类型
Vary: Accept-Encoding
用于服务器的缓存。
Cache-Control: private, max-age=10
告诉客户端是否进行缓存和缓存的策略
Expires: Thu, 03 Aug 2017 11:56:08 GMT
用来控制缓存,告诉浏览器本期响应的过期时间,如果过了这个事件缓存器就会重新请求。
Last-Modified: Thu, 03 Aug 2017 11:55:58 GMT
请求资源的最后修改时间
X-UA-Compatible: IE=10
推荐的渲染引擎
X-Frame-Options: SAMEORIGIN
防止被别人frame就是防止别人偷偷的包含你的网页在他网页里,
- DENY:浏览器拒绝当前页面加载任何Frame页面
- SAMEORIGIN:frame页面的地址只能为同源域名下的页面
- ALLOW-FROM:origin为允许frame加载的页面地址
Content-Encoding: gzip
web服务器支持的返回内容压缩编码类型。
响应正文
根据不同的请求会返回不同的报文 比如本次请求返回的html页面。