Java教程

Java Web 入门笔记(三)——HTTP

本文主要是介绍Java Web 入门笔记(三)——HTTP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、简介

概述

HTTP(超文本传输协议)是一个简单的请求-响应协议,通常运行于TCP之上,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

超文本:是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。可以理解为普通的文本文件中若是含有超链接,点击超链接后可以进入另一个文本文件,该文本即为超文本。

在这里插入图片描述
当客户端使用浏览器访问网页时,浏览器向服务器发送请求,随后服务器会返回响应给浏览器客户端,所谓的响应就是服务器发送HTML文件给浏览器,浏览器接收发送过来的HTML文件。

设计HTTP的初衷就在于提供一种发布和接收HTML页面的方法,我们可以将其理解为一种规范。所有的WWW文件都必须遵守HTTP的标准。

发展历程

  1. Http 0.9

    在1990年,WWW之父蒂姆·贝纳斯·李提出HTTP协议,随后WWW联盟成立,组织了IETF小组进一步完善和发布HTTP;

    此时的Http协议只是一个草案,纯文本格式。贝纳斯最初设想的系统里的文档都是只读的,所以只允许用“GET”方法从服务器上获取HTML文件,并且在响应请求之后立即关闭连接,功能十分有限。

  2. Http 1.0

    在1996年正式发布,增加了HEAD、POST等方法,增加了响应状态码(如:404),标记可能的错误原因,引入了协议版本号的概念、HTTP header头概念,传输的数据不在限制于文本。

    在1.0中服务器发送完一个http响应后,会断开连接。

  3. Http 1.1

    是目前互联网上使用最广泛的协议,功能也十分完善。

    1.1版本协议增加了PUT、DELETE等新的方法;增加了缓存管理和控制;明确了连接管理;允许持久连接;允许响应数据分块,利于传输大文件;强制要求Host头,让互联网主机托管称为可能

  4. Http 2.0

    相对于Http 1.1来说:

    • 提升访问速度
    • 允许多路复用
    • 二进制分帧
    • 首部压缩
    • 服务器推送

重点掌握Http/1.0和Http/1.1,其它了解即可

Http 和 Https

Https可以理解为Http + security!

HTTPS是安全超文本协议,在HTTP基础上有更强的安全性。简单来说,HTTPS是使用TLS/SSL加密的HTTPS协议。

HTTPS和HTTP的区别:

  1. 安全性上,HTTPS更安全;
  2. 传输协议上,HTTP明文传输,HTTPS是具有安全性的SSL加密传输
  3. 连接端口,HTTP:80;HTTPS:443

2、工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即Web服务器发送所有请求。

Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP默认端口号为80,但是我们也可以改为8080等其他端口

3、消息结构

HTTP消息结构分为两种,HTTP请求Request和HTTP响应Response。HTTP请求为客户端–>发请求–>服务器;HTTP响应为服务器–>响应–>客户端。

  • HTTP客户端:一个应用程序(如Web浏览器、腾讯视频app),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
  • HTTP服务器:同样也是一个应用程序(通常是一个Web服务器,如Apache Web服务器),通过接收客户端的请求并向客户端发送HTTP响应数据。
  • HTTP数据连接:HTTP使用统一资源标识符(URI)来传输数据和建立连接。
  • 一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

客户端请求消息:Request

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(Request line)、请求头部(header)、空行和请求数据四个部分组成,以下图片给出了请求报文的一般格式:

在这里插入图片描述
以百度发送请求为例:

以下这四行即为请求行和请求头部信息;

Request URL:https://www.baidu.com/	请求地址
Request Method:GET	get方法/post方法
Status Code:200 OK	状态码:200
Remote (远程)	Address:14.215.177.39:443

以下即为请求数据;

Accept:text/html	告诉浏览器,它所支持的数据类型是什么
Accept-Encoding		支持哪种编码格式
Accept-Language:zh-CN,zh;q=0.9	语言
Cache-Control:max-age=0			缓存控制
Connection:keep-alive			告诉浏览器,请求完成是断开还是保持连接

实际上的请求数据远不止如此,但是我们只需要掌握以上截取的内容即可。

服务端响应消息:Response

服务器响应也是由四个部分组成:状态行、消息报头、空行和响应正文

HTTP/1.1 200 OK								//第一行:状态行
Date:Sat, 25 July 2021 19:10:59 GMT			//第2~4行:消息报头
Content-Type:text/html;charset=ISO-8859-1
Content-Length:122
											//空行
<html>										//下面都是响应正文
<head>
<title>英雄联盟</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

我们还是以百度为例:

Cache-Control:private	缓存控制
Connection:Keep-Alive	连接
Content-Encoding:gzip	编码类型
Content-Type:text/html	类型

响应体:

Accept	告诉浏览器,它所支持的数据类型
Accept-Encoding	支持哪种编码格式 BGK UTF-8 GB2312 ISO8859-1
Accept-Language	告诉浏览器,它的语言环境
Cache-Control	缓存控制
Connection	告诉浏览器,请求完成是断开还是保持连接
HOST	主机...
Refrush	告诉客户端,多久刷新一次
Location	让网页重新定位

响应状态码

200:请求响应成功

3xx:请求重定向

4xx:找不到资源,比如404——懂的都懂(在线滑稽=。=)

5xx:服务器代码错误

4、请求方法详解

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。

HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法。

  • GET:请求指定的页面信息,并返回实体主体;
  • HEAD:类似GET,知识不返回实体主体;
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改;
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容;
  • DELETE:请求服务器删除指定的页面;
  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器;
  • OPTIONS:允许客户端查看服务器的性能;
  • TRACE:回显服务器收到的请求,主要用于测试或诊断;
  • RATCH:是对PUT方法的补充,用来对已知资源进行局部更新。
这篇关于Java Web 入门笔记(三)——HTTP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!