深入HTTP协议
2016-04-22 00:30
375 查看
就像在招待客人一样得遵守一定礼节,浏览器与web服务器一问一答的交互过程也得遵守一定的规则——HTTP协议(HyperText Transfer Protocol)。现代B/S架构都是基于统一的HTTP协议,基于此协议的服务器有Apache、IIS、Nginx、Tomcat、JBoss等。目前被广泛使用的是HTTP1.1(主要讨论此版本),与上个版本最大的区别是支持持续连接。B/S固定不变的原则:URL、HTTP、浏览器。
当浏览器向服务器发出一次请求,web服务器返回HTML文档给浏览器后,两者不再有任何关系。上一次请求的响应结果不影响下次请求的响应结果,如用户网线接触不良,重新插好网线后,再次发送请求,web服务器是感知不到的,只要浏览器发出的请求内容一样,它的处理过程就完全一样。所以说HTTP协议是无状态的。
代理服务器(可有效减少服务器的访问负载)的工作流程:
①当浏览器发出请求后,若本地缓存有请求的资源,直接取出保存的副本进行响应;
②若本地没有请求的资源,代理服务器就向web服务器请求该资源并返回给用户,同时将资源保持在本地缓存。
HTTP协议采用无状态短连接的通信方式。因为web应用每天都要处理大量的请求,不可能每个用户访问都保持住这个连接。HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应。eg.一个网页中的css、JavaScript、图片文件(HTTP1.0都要单独建立TCP连接,非常耗时)。一个页面的css文件经常要发送多个HTTP请求,但每个单独的页面还是需要使用各自的TCP连接,所以称为短连接。
在浏览器输入http://www.sina.com.cn/:
①首先请求DNS把该域名映射成IP地址;
②根据IP地址在互联网找到对应的服务器;
③向该服务器发送一个get请求;
④服务器返回数据资源。
发起请求
一个完整的请求消息包括:一个请求行、若干消息头、以及实体内容。
一个完整的响应消息包括:一个状态行、若干消息头、以及实体内容。
消息头和实体内容要用空行隔开(即回车和换行两个字符)
若HTTP消息包括实体内容,且没采用chunked传输编码方式,则消息头必须包含实体内容的长度的字段,否则客户端和服务程序无法知道实体内容何时结束。
1.请求行
格式:请求方式 资源路径 HTTP版本号<CRLF>
举例:GET/test.html HTTP/1.1
请求方式:POST,HEAD,OPTIONS,DELETE,TRACE,PUT
2.状态行
格式:HTTP版本号 状态号 原因描述<CRLF>
举例:HTTP/1.1 200 OK
实例:telnet localhost 8080(“ctr+]”,组合键打开本地回显)
我们来解析一下在浏览器输入http://www.sina.com.cn/的url后,各请求头和响应头的部分:
请求头:
Host: www.sina.com.cn(指定被请求资源)
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0(客户端的操作系统、浏览器和其他属性)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8(指出浏览器能够处理的MIME类型)
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3(指定一种自然语言)
Accept-Encoding: gzip, deflate(指定可接受的内容编码)
DNT: 1
Connection: keep-alive(当前连接是否保持)
If-Modified-Since: Thu, 21 Apr 2016 14:22:29 GMT(缓存文档最后更新时间)
补充:Referer:
①如果从浏览器地址输入URL发出,则不应发送Referer请求头;
②使用指定的超链接的URL发出,发送Referer请求头。(这样可以追踪和了解发出本次请求的起源URL地址)
响应头:
Age: 51(可在客户机或代理服务器中缓存的有效时间,单位秒)
Cache-Control: max-age=60(缓存的内容将在60秒后失效)
Content-Encoding: gzip(指定实体内容的压缩编码方式)
Content-Length: 120981(指明实体内容长度)
Content-Type: text/html(发送给接受者实体正文类型)
Date: Thu, 21 Apr 2016 15:42:42 GMT
Expires: Thu, 21 Apr 2016 15:43:42 GMT(指定当前文档什么时候过期,不能继续使用本地缓存)
Last-Modified: Thu, 21 Apr 2016 15:42:12 GMT(缓存文档最后更新时间)
Server: nginx(指定服务器软件的产品名称)
Vary: Accept-Encoding(指定影响了服务器所生成的响应内容的那些请求头字段名)
X-Cache: HIT from cmnet.xxg.18a4.31.spool.sina.com.cn
X-Powered-By: shci_v1.03
补充:
Ctrl+F5可以绕过本地缓存和远程缓存,通过增加请求头:Pragma: no-cache、Cache-Control: no-cache,重新发送请求响应新内容。
CDN工作机制:
CDN(Content Delivery Network,内容分布网络),是一种先进的流量分配网络,使用户就近取得所需内容,提高访问网站的速度。
可近似认为CDN=镜像(mirror)+缓存(cache)+整体负载均衡(GSLB)。可明显提高Internet中信息流动效率。CDN以缓存静态数据为主,eg.CSS、JS、图片和静态页面。淘宝有90%以上的数据都是由CDN来提供的。
作者: @nanphonfy
Email:
当浏览器向服务器发出一次请求,web服务器返回HTML文档给浏览器后,两者不再有任何关系。上一次请求的响应结果不影响下次请求的响应结果,如用户网线接触不良,重新插好网线后,再次发送请求,web服务器是感知不到的,只要浏览器发出的请求内容一样,它的处理过程就完全一样。所以说HTTP协议是无状态的。
代理服务器(可有效减少服务器的访问负载)的工作流程:
①当浏览器发出请求后,若本地缓存有请求的资源,直接取出保存的副本进行响应;
②若本地没有请求的资源,代理服务器就向web服务器请求该资源并返回给用户,同时将资源保持在本地缓存。
HTTP协议采用无状态短连接的通信方式。因为web应用每天都要处理大量的请求,不可能每个用户访问都保持住这个连接。HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应。eg.一个网页中的css、JavaScript、图片文件(HTTP1.0都要单独建立TCP连接,非常耗时)。一个页面的css文件经常要发送多个HTTP请求,但每个单独的页面还是需要使用各自的TCP连接,所以称为短连接。
在浏览器输入http://www.sina.com.cn/:
①首先请求DNS把该域名映射成IP地址;
②根据IP地址在互联网找到对应的服务器;
③向该服务器发送一个get请求;
④服务器返回数据资源。
发起请求
一个完整的请求消息包括:一个请求行、若干消息头、以及实体内容。
一个完整的响应消息包括:一个状态行、若干消息头、以及实体内容。
消息头和实体内容要用空行隔开(即回车和换行两个字符)
若HTTP消息包括实体内容,且没采用chunked传输编码方式,则消息头必须包含实体内容的长度的字段,否则客户端和服务程序无法知道实体内容何时结束。
1.请求行
格式:请求方式 资源路径 HTTP版本号<CRLF>
举例:GET/test.html HTTP/1.1
请求方式:POST,HEAD,OPTIONS,DELETE,TRACE,PUT
2.状态行
格式:HTTP版本号 状态号 原因描述<CRLF>
举例:HTTP/1.1 200 OK
实例:telnet localhost 8080(“ctr+]”,组合键打开本地回显)
我们来解析一下在浏览器输入http://www.sina.com.cn/的url后,各请求头和响应头的部分:
请求头:
Host: www.sina.com.cn(指定被请求资源)
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0(客户端的操作系统、浏览器和其他属性)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8(指出浏览器能够处理的MIME类型)
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3(指定一种自然语言)
Accept-Encoding: gzip, deflate(指定可接受的内容编码)
DNT: 1
Connection: keep-alive(当前连接是否保持)
If-Modified-Since: Thu, 21 Apr 2016 14:22:29 GMT(缓存文档最后更新时间)
补充:Referer:
①如果从浏览器地址输入URL发出,则不应发送Referer请求头;
②使用指定的超链接的URL发出,发送Referer请求头。(这样可以追踪和了解发出本次请求的起源URL地址)
响应头:
Age: 51(可在客户机或代理服务器中缓存的有效时间,单位秒)
Cache-Control: max-age=60(缓存的内容将在60秒后失效)
Content-Encoding: gzip(指定实体内容的压缩编码方式)
Content-Length: 120981(指明实体内容长度)
Content-Type: text/html(发送给接受者实体正文类型)
Date: Thu, 21 Apr 2016 15:42:42 GMT
Expires: Thu, 21 Apr 2016 15:43:42 GMT(指定当前文档什么时候过期,不能继续使用本地缓存)
Last-Modified: Thu, 21 Apr 2016 15:42:12 GMT(缓存文档最后更新时间)
Server: nginx(指定服务器软件的产品名称)
Vary: Accept-Encoding(指定影响了服务器所生成的响应内容的那些请求头字段名)
X-Cache: HIT from cmnet.xxg.18a4.31.spool.sina.com.cn
X-Powered-By: shci_v1.03
补充:
Cache-directive | 说明 |
public | 所有内容都将被缓存 |
private | 内容只缓存到私有缓存中 |
no-cache | 必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。 |
no-store | 所有内容都不会被缓存到缓存或 Internet 临时文件中 |
must-revalidation/proxy-revalidation | 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证 |
max-age=xxx (xxx is numeric) | 缓存的内容将在 xxx 秒后失效,这个选项只在HTTP 1.1可用,并如果和Last-Modified一起使用时,优先级较高 |
CDN工作机制:
CDN(Content Delivery Network,内容分布网络),是一种先进的流量分配网络,使用户就近取得所需内容,提高访问网站的速度。
可近似认为CDN=镜像(mirror)+缓存(cache)+整体负载均衡(GSLB)。可明显提高Internet中信息流动效率。CDN以缓存静态数据为主,eg.CSS、JS、图片和静态页面。淘宝有90%以上的数据都是由CDN来提供的。
作者: @nanphonfy
Email:
nanphonfy (Nfzone) gmail.com 请将(Nfzone)换成@
相关文章推荐
- HTTP Status 500
- Http中的重定向和请求转发
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- VIEWGOOD(远古)校园网络课堂直播点播录制解决方案
- http协议中apache隐藏头部版本信息,PHP版本信息隐藏
- Mono fix compiled issue "Are you missing `System.Net.Http' assembly reference?"
- javaweb中HTTP协议
- http://www.cnblogs.com/enshrineZither/p/3793459.html
- 关于计算机网络一些问题的思考
- [HTTP:101170]The servlet DelServletContextAttr is referenced in servlet-mapping /servlet/DelServlet
- HTTP协议(转)
- Atitit.http代理的实现 代码java php c# python
- Atitit.http代理的实现 代码java php c# python
- Socket网络编程 客户端与服务端通信流程
- 使用post的方式发送http请求
- Atitit.http代理的实现 代码java php c# python
- tit.Atitit. http 代理原理 atiHttpProxy 大木马 h
- Atitit. http 代理原理 atiHttpProxy 大木马
- Atitit. http 代理原理 atiHttpProxy 大木马
- 使用第三方框架实现异步的HttpClient