HTTP协议
超文本传输协议(HyperText Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。
HTTP 是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。
HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443。
-
HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
-
HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
-
HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP消息结构
客户端请求
- 请求行:包括了客户端的请求方法,URI、HTTP版本。·
- 请求首部字段:允许客户端传递关于自身的信息和希望的响应形式。
- 通用首部字段:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。
- 实体首部字段:定义被传送资源的信息。即可用于请求,也可用于响应。
- 报文主体:一般在GET方法中没有报文主体,在使用POST方法的时候才有。
常见的请求首部字段:
- Accept:浏览器可接受的MIME类型。
- Accept - Charset:浏览器可接受的字符集。
- Accept - Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
- Accept - Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
- Authorization:授权信息,通常出现在对服务器发送的WWW - Authenticate头的应答中。
- Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep - Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content - Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
- Content - Length:表示请求消息正文的长度。
- Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。
- From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
- Host:初始URL中的主机和端口。
- If - Modified - Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
- Pragma:指定“no - cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
- Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
- User - Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
- UA - Pixels,UA - Color,UA - OS,UA - CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
请求方法:
服务器响应
- 状态行:通过提供一个状态码来说明所请求的资源情况。·
- 响应首部字段:服务器端向客户端发送响应报文使用的首部包括相应的附加内容,要求客户端补充的消息等。
- 通用首部字段:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。
- 实体首部字段:定义被传送资源的信息。即可用于请求,也可用于响应。
- 报文主体:一般在GET方法中没有报文主体,在使用POST方法的时候才有。
最常用的状态码有:
- 200 (OK): 找到了该资源,并且一切正常。
- 304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
- 401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
- 403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
- 404 (NOT FOUND): 在指定的位置不存在所申请的资源。
常见请求头:
- Accept:浏览器可接受的MIME类型。
- Accept - Charset:浏览器可接受的字符集。
- Accept - Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
- Accept - Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
- Authorization:授权信息,通常出现在对服务器发送的WWW - Authenticate头的应答中。
- Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep - Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content - Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
- Content - Length:表示请求消息正文的长度。
- Cookie:这是最重要的请求头信息之一。
- From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
- Host:初始URL中的主机和端口。
- If - Modified - Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
- Pragma:指定“no - cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
- Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
- User - Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
- UA - Pixels,UA - Color,UA - OS,UA - CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
请求首部字段
- Accept :用户代理可处理的媒体类型。
- Accept-Charset :优先的字符集。
- Accept-Encoding :优先的内容编码。
- Accept-Language :优先的语言(自然语言)。
- Authorization Web:认证信息。
- Expect :期待服务器的特定行为。
- From :用户的电子邮箱地址。
- Host :请求资源所在服务器。
- If-Match :比较实体标记(ETag)。
- If-Modified-Since :比较资源的更新时间。
- If-None-Match :比较实体标记(与 If-Match 相反)。
- If-Range: 资源未更新时发送实体 Byte 的范围请求。
- If-Unmodified-Since :比较资源的更新时间(与If-Modified-Since相反)。
- Max-Forwards :最大传输逐跳数。
- Proxy-Authorization: 代理服务器要求客户端的认证信息。
- Range: 实体的字节范围请求。
- Referer :对请求中 URI 的原始获取方。
- TE :传输编码的优先级。
- User-Agent HTTP :客户端程序的信息。
响应首部字段
- Accept-Ranges: 是否接受字节范围请求。
- Age :推算资源创建经过时间。
- ETag :资源的匹配信息。
- Location: 令客户端重定向至指定URI。
- Proxy-Authenticate: 代理服务器对客户端的认证信息。
- Retry-After :对再次发起请求的时机要求。
- Server HTTP :服务器的安装信息。
- Vary: 代理服务器缓存的管理信息。
- WWW-Authenticate :服务器对客户端的认证信息。
通用首部字段
- Cache-Control:控制缓存的行为。
- Connection:逐跳首部、连接的管理。
- Date:创建报文的日期时间。
- Pragma:报文指令。
- Trailer:报文末端的首部一览。
- Upgrade:升级为其他协议。
- Via:代理服务器的相关信息。
- Warning:错误通知。
实体首部字段
- Allow :资源可支持的HTTP方法。
- Content-Encoding :实体主体适用的编码方式。
- Content-Language :实体主体的自然语言。
- Content-Length :实体主体的大小(单位:字节)。
- Content-Location :替代对应资源的URI。
- Content-MD5 :实体主体的报文摘要。
- Content-Range :实体主体的位置范围。
- Content-Type :实体主体的媒体类型。
- Expires :实体主体过期的日期时间。
- Last-Modified :资源的最后修改日期时间。
抓包分析
标签:协议,浏览器,请求,首部,Accept,流量,HTTP,客户端 From: https://www.cnblogs.com/wlhk/p/17207208.html