本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本文主要内容:http协议,请求协议,响应协议,状态码,以及OSI相关知识。
1 何为服务器?何为Web资源?
工作中传程序员讨论时,经常能听到浏览器请求,服务器响应这一类的话语。但是只知道这些是不够的,在我看来如果能够理解我们请求的是什么,服务器是怎么响应的,这样对于后面Tomcat,以及框架的理解都有一定的帮助
首先聊聊我们天天挂在嘴边的服务器都有什么资源。在服务器中有一块区域叫做Web资源区,在这一块区域中又分为静态资源和动态资源。通常请求的资源是在服务器里的一个叫做Web资源的地方。它里面包含静态资源HTML,动态资源JSP,Servlet。我们请求的就是这三个东西。那么如何请求呢?这件事情我们天天在做,却很少人知道这就叫请求,其实请求在我看来就是:访问web资源。步骤是打开浏览器,输入URL( 协议名://域名:端口/路径 )。
注意点: 1. 这里考虑到有人想到没有IP怎么知道去哪里请求资源?能考虑到这个说明你特别优秀,这里的域名最终会被解析成一个IP地址,对应一台计算机。 2.浏览器只能解析静态资源,如果你访问的是动态资源,那么tomcat会帮你把动态资源转换成静态资源,然后响应给浏览器。
2 Http协议
HTTP(HyperText Transfer Protocol)协议中文名是超文本传输协议。 这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。这里的HT代表超文本,例如一些视频,音频等。所谓的协议就是双方通信的规则,在JavaWeb开发中的双方就是浏览器跟服务器。并且Http协议是一个无状态的协议,一次通信后就结束了。无状态可以理解为,浏览器向服务器请求了一个a.html。服务器响应后就不管浏览器了,因为你的请求我已经解决完毕了。
举个例子,今天你给中国电信美女客服打了电话,“喂,我的流量还有多少?”,“你的流量还有很多放心用!”。过了一个月,你发现上次的美女客服声音有点甜,我再打一个?然后你又打过去了,“喂,我是上次那个查流量的你还记得我吗?”,“(心里嘀咕: ***** **)先生您好,我不知道你是谁!”。这个例子中你再次请求查流量,但是处理两次请求的人不一样。类比到http每次请求都是新的人来帮你处理,再次请求,你是谁?只要请求到了资源,你把网线拔了依旧能看到响应过的页面!
3 请求协议
客户端发送给服务器的格式叫“请求协议”。所谓的请求协议包括:请求行,请求头,请求空行,请求体。换句话说,服务器端只能读懂上述的请求格式(请求行,请求头,请求空行,请求体)。常见的请求方式有两种get请求跟post请求。
3.1 get请求
解析:
- 第一行:Get请求,请求服务器路径是/hello/index.jsp,协议版本为1.1
- 第二行:请求的ip/主机
- 第三行:浏览器与操作系统相关信息
- 第四行:声明客户端能读懂的文档类型, / 代表都可以
- 第五行:声明客户端的语言
- 第六行:支持的压缩格式
- 第七行:声明客户端支持的编码格式
- 第八行: 客户端支持的链接方式,保持一段时间链接,默认为3000ms;
- 第九行:JSESSIONID是Cookie(会话)的名字,二次访问会带着这个名字直接找资源,无需在处理。
- 注意:get请求没有请求体
3.2 post
post请求是可以有请求体的,这边只提及几个相对重要的请求头
- Referer:表示请求来源,这个请求来自哪个页面,例如你在谷歌搜索框搜索知乎,并点击链接到知乎,那么Referer:www.google.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头。
- Content-Type:直译过来就是响应类型
- Content-Length:请求体的长度
- keyword=hello:请求体内容
补充:Referer头还具有统计和防盗链作用。
4 响应协议
服务器发送给客户端的格式叫“响应协议”。所谓的响应协议包括:响应行,响应头,响应空行,响应体。响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。例如下图:
解析:
- 第一行:响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释
- 第二行:服务器版本信息
- 第三行:编码为UTF8
- 第四行:响应体为724字节
- 第五行:响应给客户端的Cookie
- 第六行:响应时间(可能存在八小时时区差)
补充:1.其他响应头:
2.响应状态码
5 干货
在HTMl页面中可以使用来指定响应头,例如在index.html页面中给出,表示浏览器只会显示index.html页面3秒,然后自动跳转到http://www.google.com。
同样的JSP中的page指令中的部分属性也对应响应头信息!
6 OSI与HTTP,TCP,UDP
OSI七层模型这个可以看看下面的图,首先会引起混乱的是TCP跟UDP协议。UDP是用户数据包协议,属于OSI模型中的传输层。TCP是传输控制协议,与UDP是同级的,属于传输层。这两个协议很容易跟http协议容易给初学者搞蒙。实际上他们是平级关系,同属于OSI模型,http属于应用层协议,而TCP,UDP属于传输层协议。任何的网络模型都是从硬件到软件,OSI是理想化的模型。
你可以选择放弃,但你不能放弃选择。我是小林,大家下期再见!