HTTP协议认识

一、HTTP协议概念

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

请求信息格式

●请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。
●(请求)头,例如Accept-Language: en
●空行
●可选的消息体
 
响应信息格式
●响应行,例如HTTP/1.1 304 Not Modified ,协议/版本号 状态码 状态消息
●(响应)头,例如 ETag: 9181448958830740071
●空行
●可选的消息体
二、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请求报头域,如下:

Host:http://www.china.edu.cn

四、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,返回新的地址让客户端再次以这个地址请求

原文地址:https://www.cnblogs.com/jenniferhuang/p/3383912.html