Java Http的基础概念了解

作者:CrazyDragon_King 时间:2021-08-12 04:23:28 

学完了计算机网络课程以后,确实学到了一些网络的概念,初步拥有了对网络的一些认识。这些概念虽然可以用来解释平时网络上遇到的一些问题,但是真正把网络的知识运用在平时编程当中,机会还是比较少的。所以,对网络的一些概念大多还是来自于书本,在平时学习的过程中,没有自己亲自体会到这些概念的用处,无法学以致用。

有一次我看到了一个Java手写Http 服务器的代码,感觉眼前一亮,很是有趣。这个程序是通过TCP编程来构建一个简单的Http服务器。正好也对应了计算机网络分层的概念,Http协议是建立在TCP协议之上的,所以可以使用TCP编程来构建Http服务器。因此我准备来写一个系列博客记录一下自己的学习过程。这一些列会包括一些概念的介绍,然后是逐步编码实现一个Http服务器的小demo。

基本概念了解

网络的分层

注:关于概念的东西,这里不会介绍太多,毕竟还是书本上的知识更加全面一些,这里主要就是介绍一些概念。

计算机网络被划分为具有层次的结构,按照目前使用的TCP/IP 4层协议。TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。 我们学习的时候,是划分成了五层协议来学习的,从底层到高层分别是:物理层->数据链路层->网络层->传输层->应用层

这里只要知道:HTTP协议是建立在TCP协议之上的(或者应用层是建立在传输层之上的)。

感兴趣的可以去了解一下 TCP/IP 和 OSI 的关系,并且为何是TCP/IP成为了主流?

Java Http的基础概念了解

HTTP协议

HTTP(HyperText Transfer Protocol),中文是超文本传输协议。它是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地计算机的传送协议。HTTP基于TCP/IP通信协议来传递数据。 HTTP基于客户端/服务端(C/S)架构模型,是一个无状态的请求/响应协议。 我们每天都会使用它,无论是浏览网页、看视频(基于Http协议的视频流)或者是下载文件(这里指使用Http协议下载),都是Http协议在起作用,可见它的无处不在。

但是,作为一个计算机专业的学生,光知道这些还是不够的,我们需要了解具体的协议。上面说了,HTTP是一个请求、响应协议,这里就是说,用户发送一个请求,会得到一个响应。请求和响应都会对应一个协议报文,分别称之为请求报文和响应报文,通常我们说HTTP报文就是指这二者。

HTTP报文分为报文头和报文体。 报文头部是一些必要的控制信息和对报文体数据的说明信息。通过这些信息,浏览器(通常是浏览器)就可以处理各种信息了,无论是文字、视频还是图片都是通过报文在网络上面进行传输。

请求报文和响应报文

Java Http的基础概念了解

这里主要是需要知道报文的结构特点,因为后面需要解析简单的HTTP报文(更详细的报文知识,可以阅读书籍或者参考其他人的博客。或者你也可以直接阅读后面的博客,遇到问题再去看,这样效果会更好!) 报文头部每一行需要一个回车换行符:CRLF CR: \r LF: \n 报文头和报文体之间使用一个单独的CRLF分开。 注意:GET请求没有报文体。

//请求报文
GET /test/hi-there.txt HTTP/1.1\r\n
Accept: text/plain\r\n
Host: www.joes-hardwar.com\r\n
//请求报文
HTTP/1.0 200 OK\r\n
Content-Type: text/plain\r\n
Content-Length: 19\r\n
\r\n
Hi! I'm a message!

HTTP和TCP的关系

HTTP协议是建立在TCP协议之上的,上面我们所看到的请求和响应报文,对于TCP来说就是一串网络字节流。 我们后面的代码会加深你对于这句话的理解了。这里使用Java语言来进行编程,在Java中使用TCP编程,主要就是使用Java提供的Socket 套接字,也就是 Socket 和 ServerSocket 两个类。

总结

这里主要就是简略介绍一下需要的概念知识和需要具备的编程能力。

1.了解网络分层的概念,知道HTTP和TCP的关系。

2.了解HTTP报文的结构特点。

3.具备Socket和ServerSocket编程的能力。

来源:https://blog.csdn.net/qq_40734247/article/details/106029803

标签:java,Http,概念
0
投稿

猜你喜欢

  • SpringBoot统一响应格式及统一异常处理

    2022-08-30 08:03:08
  • 浅谈Spring与SpringMVC父子容器的关系与初始化

    2023-02-08 12:09:05
  • Unity3D实现虚拟按钮控制人物移动效果

    2022-06-13 04:26:26
  • Android三种菜单实例分析

    2023-09-09 05:17:20
  • Unity3D实现旋钮控制灯光效果

    2021-09-05 21:16:58
  • Android自定义View之组合控件实现类似电商app顶部栏

    2023-07-26 22:14:10
  • java springboot poi 从controller 接收不同类型excel 文件处理

    2023-10-17 14:26:05
  • Java的设计模式编程中迪米特法则的应用示例

    2022-10-29 01:34:35
  • Android 获取屏幕高度,标题高度,状态栏高度(实例代码)

    2022-10-17 15:49:37
  • Java 8 lambda表达式引入详解及实例

    2022-10-25 22:41:37
  • SpringMVC中MultipartFile上传获取图片的宽度和高度详解

    2023-01-30 20:43:19
  • Android 文件存储及常见问题解决

    2023-07-12 13:25:45
  • Spring Cache手动清理Redis缓存

    2023-11-29 02:49:52
  • SpringBoot分页查询功能的实现方法

    2023-07-14 02:22:21
  • C语言实现矩阵翻转(上下翻转、左右翻转)

    2023-10-24 22:42:36
  • java8 forEach结合Lambda表达式遍历 List操作

    2021-07-04 07:22:55
  • Android中GridView和ArrayAdapter用法实例分析

    2021-06-24 05:12:34
  • java多线程编程学习(线程间通信)

    2023-04-02 05:25:34
  • newtonsoft.json解析天气数据出错解决方法

    2022-03-10 12:23:21
  • android实现简单仪表盘效果

    2023-05-31 22:37:39
  • asp之家 软件编程 m.aspxhome.com