HTTP协议认识
一、HTTP协议概念
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
请求信息格式
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
常见的状态码信息
200 OK 表明该请求被成功地完成,所请求的资源发送回客户端
301 Moved Permanently 请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置
302 Found 重定向,新的URL会在response 中的Location中返回,浏览器将会自动使用新的URL发出新的Request
304 Not Modified 代表上次的文档已经被缓存了, 还可以继续使用
400 Bad Request 客户端请求与语法错误,不能被服务器所理解,告诉客户端,它发送了一个错误的请求
401 Unauthorized 需要客户端对自己认证
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在(输错了URL)
500 Internal Server Error 服务器发生了不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
三、HTTP Request header
使用Fiddler 能很方便的查看Reques header, 点击Inspectors tab ->Request tab-> headers 如下图所示
Cache 头域
1)If-Modified-Since
作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间(Last-Modified)进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中
2)If-None-Match
作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能
3)Cache-Control
作用: 用来指定Response-Request遵循的缓存机制
Client 头域
1)Accept
作用: 浏览器端可以接受的媒体类型,
例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable),通配符 * 代表任意类型
2)Accept-Encoding:
作用: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
3)Accept-Language
作用: 浏览器申明自己接收的语言
4)User-Agent
作用:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
Cookie/Login 头域
1)Cookie
作用: 最重要的header, 将cookie的值发送给HTTP 服务器
Miscellaneous 头域
1)Referer:
作用: 提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站
Transport 头域
1)Connection
例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
2)Host(发送请求时,该报头域是必需的)
作用: 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的
例如: 我们在浏览器中输入:http://www.china.edu.cn/index.html
浏览器发送的请求消息中,就会包含Host请求报头域,如下:
四、HTTP Response header
同样使用Fiddler 查看Response header, 点击Inspectors tab ->Response tab-> headers 如下图所示
Cache头域
1)Date
作用: 生成消息的具体时间和日期
2)Expires
作用: 浏览器会在指定过期时间内使用本地缓存
3)Vary
作用:
例如: Vary: Accept-Encoding
Cookie/Login 头域
1)P3P
作用: 用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题
2)Set-Cookie
作用: 非常重要的header, 用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie
Entity头域
1)ETag
作用: 和If-None-Match 配合使用
2)Last-Modified
作用: 用于指示资源的最后修改日期和时间,和If-Modified-Since 配合使用
3)Content-Type
作用:WEB服务器告诉浏览器自己响应的对象的类型和字符集
4)Content-Length
作用:指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端
5)Content-Encoding
作用:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
6)Content-Language
作用: WEB服务器告诉浏览器自己响应的对象的语言者
Miscellaneous 头域
1)Server
作用:指明HTTP服务器的软件信息
2)X-AspNet-Version:
作用:如果网站是用ASP.NET开发的,这个header用来表示ASP.NET的版本
3)X-Powered-By:
作用:表示网站是用什么技术开发的
Transport头域
1)Connection
例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Location头域
1)Location
作用: 用于重定向一个新的位置, 包含新的URL地址,当status code=304,返回新的地址让客户端再次以这个地址请求