初级扫盲 一个HTTP请求究竟发生了什么?

Posted 叁滴水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初级扫盲 一个HTTP请求究竟发生了什么?相关的知识,希望对你有一定的参考价值。

  提前声明,一个http请求到后端并且响应的过程,是一个非常复杂的过程,每一个点拿出来都可以扯一大堆知识,这里是为了帮助初级java开发梳理开发思路。其中会对于初级开发不重要的步骤进行简化。

1、发送一个Http请求

首先前端发送一个Http请求。前端发送http请求的方式有很多。如:

  1. 浏览器输入域名
  2. ajax发送请求
  3. form表单发送请求
  4. a标签发送请求

  等等,发送请求的方式有很多,这些方式分别作用在不同的地方。但是最终都会通过http请求到达服务器。

2、DNS转换ip

  TCP/IP 是基于 IP 地址进行通信的,但是 IP 地址是由一串复杂且易混淆的数字组成。不太容易记忆。这就出现了域名这就好比给一个服务器加上了一个名称。好比如果班里的同学全部用1、2、3、4、5序号表示,肯定是不太容易让人记住的。但是真是访问服务器的时候,又必须要通过ip访问。

  因此遍有的DNS服务器。它就是用来转换域名和ip的。当用户输入域名之后,DNS会将对应的ip进行转换。

  那host又是什么呢?为什么输入localhost和127.0.0.1又是一样的呢?

  host可以认为是一个本地是DNS服务器。里面保存这ip和域名的对应关系。如下

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

  当跑DNS服务器之前会优先去host文件中寻找对应的ip。如果能找到,就不用跑DNS服务器了。因此,这里输入一个错误的ip,然后对应的域名附加上百度的域名时。

123.123.123.123 www.baidu.com

  如上所示,输入百度就跳转到这个ip。不出意外是浏览器会一直转圈。因为这本来就是一个瞎打的ip。

  同理,可以将百度的ip和qq的ip进行互换。将两个ip和域名进行互换。

百度ip www.qq.com

腾讯ip www.baidu.com

  这样,就可以实现通过浏览器输入百度的域名浏览器缺跳转到了腾讯的网站。

  (此时想吐槽下,曾经某综艺节目中,说黑客3分钟黑掉了***网站。进入网站的时候,整个网站已经被替换了。其实就是通过这个方式,外行的看热闹~)

3、nginx

  Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。为什么需要代理?直接接入到tomcat不行吗?答案:可以的。可以直接接入tomcat。

  那nginx作用是什么呢? 负载均衡~!

  一般情况下,企业级的服务都是多机器的。这是为了减少每个服务器的压力,当浏览器请求到nginx的时候,nginx会根据负载策略进行转发。将请求按照规则转发到对应的服务器上,性能好的服务器可以多处理一些请求,性能差的服务器可以少接收一些请求。

4、tomcat

  Tomcat是web容器在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序,servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面,那么servlet如何创建? 这时候tomcat用到了,它就是帮助你创建servlet的东西,所以也称web容器,没有它,没法运行web项目。

5、java项目

在java开发的时候,一般代码都会有模块化的划分。如,可以分为controller层、service层、dao层。

  • Controler层:负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
  • Service层:叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。
  • DAO层:叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

以上是关于初级扫盲 一个HTTP请求究竟发生了什么?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel5.1 Middleware中间件(初级)

当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?

从输入网址到显示网页的过程中发生了什么?

在浏览器地址栏输入URL,按下回车后究竟发生了什么?

在浏览器地址栏输入URL,按下回车后究竟发生了什么?

编译器工作过程中究竟发生了什么?