背景知识: html
超文本传输协议 (HTTP-Hypertext transfer protocol) :一种详细规定了浏览器和万维网服务器之间互相通讯的规则,经过因特网传送万维网文档的数据传送协议。 java
七层网络协议: api
应用层协议包括:HTTP、FTP、Telnet、SMTP、RIP、NFS、DNS;TCP/UDP协议属于传输层协议;IP协议属于网际层。 浏览器
深刻理解一方面知识以前最好可以理清知识的结构,而后再对症寻医。
服务器
正文:
网络
从开发角度上,咱们主要从“七层网络协议”中应用层协议的“HTTP协议”入手去了解“请求”和“响应”,从而屏蔽再往下的细节,并为更上层的开发奠基知识理论基础。这里的请求和响应就是咱们经常说到的Request和Response。 学习
HTTP内容不少,本文只挑选所能用来解释本话题的相关知识(也就是说包括但并不只限于,更详细戳这里《HTTP权威指南》),废话太多了。 spa
一次请求是什么东西?教材上每每会给出不少内容:请求行、消息报头、请求正文,每部份内容中又能够细分不少Key-Value。具体是什么,能够用Firefox下的HttpFox扩展组件看个究竟。(Web开发推荐使用Firefox,固然也有人很喜欢Chrome),如图(一次访问百度首页的相关细节): .net
从该组件中,咱们能够清楚看到一次URL访问(请求www.baidu.com以及随之而来的若干次请求)的细节,包括:Headers、Cookies、Query String、POST Data、Content等。具体的Key-Value中不清楚的你们搜下资料。 htm
继续从HTTP协议层面上继续咱们的理解,这一次请求包含了如上不少内容,那服务器那边是若是对待这个请求的?拿Tomcat服务器(Servlet容器)来讲,它会在HTTP协议层面上把每一个请求封装在一个HttpServletRequest实例中(HttpServletRequest自己是只接口),同时也建立了一个HttpServletResponse实例(HttpServletResponse一样也是接口)做为稍后对客户端进行相应的对象。而后将这两个对象传入service,service中执行相应逻辑,最后并经过HttpServletResponse实例控制输出内容。如图:
这里有个问题是HttpServletResponse到底作了什么,不少初学者会深刻到服务器是怎么找到客户端地址的,怎么样决定输出内容仍是重定向,servlet中不进行response操做可不能够……其实这些细节是问题,但不是从总体上梳理Request和Response要去研究的;正如我在此屡次提到的HTTP协议层面,在这个层面上咱们只须要考虑这个层面应该考虑并且可以解决的问题,诸如怎么找到客户端地址等细节能够交由七层网络模型的TCP层、IP层等甚至链路层去深刻研究并最终把知识给串起来。
后记:
还没讲尽兴就后记了。其实这个话题的内容能够涉及不少不少知识,我只是从总体上简略地理了一遍请求/响应流程,更想在这里说的或者普及的是一种学习/梳理知识的方式。
IT知识实在太广了,Web应用开发只是个小分支,Java Web开发是更小的一个与语言有关的小小分支。即便是这么一个小分支,里面的内容仍是有不少的,对于置身于IT海洋的小沙粒来讲,细想确实很恐惧或者茫然。
咱们并不须要畏惧,而是掌握恰当的方法,一步一步去构建本身的知识城堡。既然是城堡,地基就很重要,咱们的地基就是那些理论、原理、规范、协议、标准(也许外星人另有一套标准,而地球人只需打扎实咱们这个星球的根基就行)。这些看似枯燥的理论知识实际上是很规范的条理很清晰的,也方便每个渴望成为Geek的初学者可以站在正确的台阶上欣赏角度不错的风景。这个台阶和角度,但愿我已经在上面洋洋洒洒的字里行间中解释清楚了。
对Java感兴趣的朋友能够留言或者私信,咱们有一个舒适的JAVA_HOME。