当前位置: 首页 > 科技观察

Java面试HTTP第一章:HTTP协议

时间:2023-03-13 19:32:16 科技观察

一、技术基石与概述Q:什么是HTTP?答:HTTP是用于客户端和服务器请求和响应的标准TCP。事实上,建立在TCP之上。我们打开百度网页,是这样的:https://www.baidu.com多了一个S,其实S就是TLS,SSL的意思。这里不做解释,所以HTTP的技术基石如图:HTTP协议呢?HTTP协议(HyperTextTransferProtocol),即超文本传输??协议,是一种用于服务器向客户端浏览器传输的传输协议。在Web上,服务器和客户端使用HTTP协议进行通信会话。结合OOP的思想,得出其session的结构是一个简单的request/response序列,即浏览器发送请求,服务器响应。2、深入理解技术基石和工作流程由于HTTP是建立在传输层之上的TCP协议,而TCP协议是面向连接的端到端协议。因此,在使用HTTP协议进行传输之前,首先要建立一个TCP连接,也就是我们所说的TCP连接过程的“三次握手”。在Web上显示,HTTP协议之所以使用TCP协议而不是UDP协议,是因为一个网页必须传输大量的数据并保证其完整性。TCP协议提供了传输控制、数据有序组织和纠错等一系列功能。一个HTTP操作称为一个事务,它的工作过程可以分为四个步骤:1.客户端和服务器需要建立连接。(例如,对于超链接,HTTP启动。)2.建立连接后,发送请求。3.服务器收到请求后,返回响应信息。4、客户端接收到服务器返回的信息,通过浏览器显示在用户的显示屏上,然后客户端与服务器断开连接。建立连接实际上是基于TCP连接。该图的核心工作流程(即省略了连接过程)如下:3.详细工作流程的HTTP报文HTTP报文由客户端向服务器端的请求和服务器端的响应组成服务器到客户端。1、请求报文格式如下:请求行通用信息头请求头实体头(空行)报文主体如图,请求我的文章时发送的报文内容博客:请求报文详解:1、RequestLine方法字段+URL+Http协议版本2、通用信息头Cache-Control头字段:指定请求和响应所遵循的缓存机制。keep-alive表示它的连接持续有效【下面百度例子,会验证一下】3.请求头Host头域,我们补上Referer头域:允许客户端指定的资源地址请求网址。User-Agent头域:请求用户信息。【可以看到部分客户端浏览器的内核信息】4、图中的消息体“p=278”一般来说,请求体中请求参数是必不可少的。2、响应报文格式如下:StatusLineGeneralInformationHeaderResponseHeaderEntityHeader(空行)报文正文如图,即本博客响应的内容:响应详解message:1.状态行HTTP协议版本+状态码+状态码的文字描述【比如这里的200表示请求成功】2.通用信息头keep-alive表示连接持续有效【在下面百度例子,会验证]Date头字段:时间描述3.ResponseHeader服务器头:处理请求的原服务器的软件信息。4.EntityheaderContent-Typeheader:接收实体的媒体类型。(这也表明你的消息正文是什么。)(空行)5.消息正文这里是HTML响应页面,可以在屏幕截图选项卡的响应中查看。一个简单的请求/响应就足够了。3、HTTP协议知识补充请求报文相关:请求行-请求方式GET请求获取Request-URI标识的资源POST在Request-URI标识的资源后追加新数据HEAD请求获取Request-URI标识的资源Resource响应报文头PUT请求服务器存储一个资源,并以Request-URI为标识留作以后使用OPTIONS请求查询服务器性能,或查询资源相关的选项和需求响应消息:响应行-状态码1xx:指示信息--表示请求已收到,继续处理2xx:成功--表示请求已经成功接收,理解,并接受3xx:Redirection--进一步的操作必须performed完成请求4xx:Clienterror--请求有语法错误或请求无法执行5xx:Server-sideerror--服务器未能执行合法请求CommonStatuscode200OK请求成功(后面跟通过对GET和POST请求的响应文档。)304NotModified文档未按预期修改。客户端已缓存文档并发出条件请求(通常通过提供If-Modified-Since标头指示客户端只需要比指定日期更新的文档)。服务器告诉客户端可以继续使用原来的缓冲文档。404NotFound服务器找不到请求的页面。500InternalServerError请求没有完成。服务器遇到不可预测的情况。比如3041和304状态码:一些图片和js文件缓存在本地客户端,下次请求后可以使用缓存的文件。2、以上HTTP请求只依赖一个TCP连接,也就是所谓的持久连接。4、了解HTTP协议的Web应用框架或者标准化JavaEE的人都会知道Servlet规范。Web应用容器都实现了HTTP协议中的对象,即请求对象和响应对象。比如javax.servlet.http.HttpServletResponse这个对象,肯定有状态码的描述,如图,至于如何使用,等系列文章吧。五、小结回过头来看全文,HTTP协议其实和我们的对话是一样的,语言就是协议。所以掌握HTTP协议,了解以下几点:1.使用什么来通过HTTP协议进行通信2.如何通过HTTP协议进行通信【本文为专栏作者“李强强”原创稿件,转载请联系作者获得转载授权】点此查看该作者更多好文