从开发者(Java)角度理解Request和Response

最后都变了- 提交于 2020-03-18 17:31:01

3 月,跳不动了?>>>

背景知识:

超文本传输协议 (HTTP-Hypertext transfer protocol) :一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

七层网络协议:

应用层协议包括:HTTP、FTP、Telnet、SMTP、RIP、NFS、DNS;TCP/UDP协议属于传输层协议;IP协议属于网际层。

深入理解一方面知识之前最好能够理清知识的结构,然后再对症寻医。

正文:

    从开发角度上,我们主要从“七层网络协议”中应用层协议的“HTTP协议”入手去了解“请求”和“响应”,从而屏蔽再往下的细节,并为更上层的开发奠定知识理论基础。这里的请求和响应就是我们常常说到的Request和Response。

    HTTP内容很多,本文只挑选所能用来解释本话题的相关知识(也就是说包括但并不仅限于,更详细戳这里《HTTP权威指南》),废话太多了。

    一次请求是什么东西?教材上往往会给出很多内容:请求行、消息报头、请求正文,每部分内容中又可以细分很多Key-Value。具体是什么,可以用Firefox下的HttpFox扩展组件看个究竟。(Web开发推荐使用Firefox,当然也有人很喜欢Chrome),如图(一次访问百度首页的相关细节):

    从该组件中,我们可以清楚看到一次URL访问(请求www.baidu.com以及随之而来的若干次请求)的细节,包括:Headers、Cookies、Query String、POST Data、Content等。具体的Key-Value中不清楚的大家搜下资料。

    继续从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。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!