Http协议

饮水思源

阮一峰-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端口。

img

HTTP请求的步骤

  1. 建立TCP连接
  2. Web浏览器发送请求命令
  3. Web浏览器发送请求头信息
  4. Web服务器响应
  5. Web服务器发送响应头信息
  6. Web服务器向浏览器发送数据
  7. 关闭TCP连接

Http 请求

当浏览器向Web服务器发送出请求的时候,服务器传递了一个数据块,即急钮信息, HTTP请求由3部分组成:

  1. 请求方法 URL地址 HTTP协议和版本
  2. 请求头
  3. 请求正文
分析

这里以我的博客园主页的一个请求为例子 鲁迅认识的那只猹,使用的浏览器为火狐浏览器,使用了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协议常用的请求方法为 GETPOSTPUTDELETE

/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的请求详细,由三部分组成

  1. HTTP协议版本 代码描述
  2. 响应头
  3. 响应正文
分析
//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 &copy;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就是防止别人偷偷的包含你的网页在他网页里

  1. DENY:浏览器拒绝当前页面加载任何Frame页面
  2. SAMEORIGIN:frame页面的地址只能为同源域名下的页面
  3. ALLOW-FROM:origin为允许frame加载的页面地址
Content-Encoding: gzip

web服务器支持的返回内容压缩编码类型。

响应正文

根据不同的请求会返回不同的报文 比如本次请求返回的html页面。

posted @ 2017-08-03 21:37  鲁迅认识的那只猹  阅读(296)  评论(0编辑  收藏  举报