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成为了主流?
HTTP协议
HTTP(HyperText Transfer Protocol),中文是超文本传输协议。它是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地计算机的传送协议。HTTP基于TCP/IP通信协议来传递数据。 HTTP基于客户端/服务端(C/S)架构模型,是一个无状态的请求/响应协议。 我们每天都会使用它,无论是浏览网页、看视频(基于Http协议的视频流)或者是下载文件(这里指使用Http协议下载),都是Http协议在起作用,可见它的无处不在。
但是,作为一个计算机专业的学生,光知道这些还是不够的,我们需要了解具体的协议。上面说了,HTTP是一个请求、响应协议,这里就是说,用户发送一个请求,会得到一个响应。请求和响应都会对应一个协议报文,分别称之为请求报文和响应报文,通常我们说HTTP报文就是指这二者。
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


猜你喜欢
- 随着互联网的飞跃式发展,移动支付已越来越受欢迎并且已成为常态,很多三方支付公司推出了很多支付方式如快捷支付、认证支付、扫码支付等等。快捷支付
- 学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下myba
- 大家好,这一篇博客来教大家一个类似于LED闹钟显示屏样式的小案例,UI比较美观,文末会提供下载相关资源地址供大家下载,首先我们来看一看这个案
- Maven Release当我们的项目达到了当前的目标,在经过检测后不需要改变。这时我们就需要将SNAPSHOT版本打包成RELEASE版本
- Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebW
- 常量池中各数据项类型详解(续)(8) CONSTANT_Class_info常量池中的一个CONSTANT_Class_info,
- 一、方法的定义1.方法体中最后返回值可以使用return, 如果使用了return, 那么方法体的返回值类型一定要指定2.如果方法体重没有r
- 成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的。下面就让我们来看看代码编写的30条建议吧。(1) 类名首字母应该大写。字段
- 前言我们在上一篇文章教大家使用ImageView+TextView的组合自定义控件...可能在开发中你还需要其他功能,例如:按下效果,可以在
- 目录前言基本概念实践1. 首先准备一个控制台小程序2. 编写使用 AppDomain 的程序一些思考1. 为什么不使用 AppDomain
- 本文实例为大家分享了UnityShader实现运动模糊的具体代码,供大家参考,具体内容如下1.此代码挂在摄像机上,使摄像机运动起来using
- Android中广播(BroadcastReceiver)的详细讲解.1. BroadcastReceiver的注册过程: (1).广播消息
- 本文实例讲述了Java面向接口编程之命令模式。分享给大家供大家参考,具体如下:一 点睛某个方法需要完成某个行为,但这个行为的具体实现无法确定
- 目录一 前言二 解决方法三 常见的错误案例分析1.错误:ERR_UNKNOWN_URL_SCHEME2.实现UC、华为浏览器处理的效果——&
- 本文实例讲述了Android编程实现等比例显示图片的方法。分享给大家供大家参考,具体如下:在android中,由于密度的影响,如果想得到图片
- 本文主要是用到java中的swing技术,以及JMFjar中的API,为大家分享了java音乐播放器的具体实现代码,供大家参考,具体内容如下
- 这一篇文章涵盖了将 Shiro 集成到基于 Spring 的应用程序的方法。Shiro 的 Java Bean兼容性使它非常适合通过 Spr
- 思路今天带大家实现一个上拉加载更多的ListView.GitHub传送门:PulmListView, 欢迎大家fork&&s
- 做Android开发五年了,期间做做停停(去做后台开发,服务器管理),当回来做Android的时候,发现很生疏,好
- 对象是使用new创建的,但是并没有与之相对应的delete操作来回收对象占用的内存。当我们完成对某个对象的使用时,只需停止对该对象的引用:将