javaweb http

发布于:2024-04-17 ⋅ 阅读:(18) ⋅ 点赞:(0)

1、http简介

HTTP 超文本传输协议(HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则 ,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为 报文 。 HTTP协议规定了报文的格式。 HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为“请求报文”,服务器发送给客户端的称为“响应报文”。

2、http发展

由于http先后发布的版本有HTTP/0.9 、HTTP/1.0 、HTTP/1.1 、HTTP/2 、HTTP/3等,由于后面的内容基本都是基于HTTP/1.1版本的,所以本章节主要详细说明该版本。

2.1 HTTP/1.1 基本概念

(1)HTTP 的第一个标准化版本 HTTP/1.1(RFC 2068)于 1997 年初发布,支持七种请求方法OPTIONS, GET, HEAD, POST, PUT, DELETE, 和TRACE 。

(2)HTTP/1.1 是 HTTP 1.0 的增强:

  • 虚拟主机允许从单个IP 地址提供多个域;
  • 持久连接和流水线连接允许 web 浏览器通过单个持久连接发送多个请求;
  • 缓存支持节省了带宽并使响应速度更快。

(3)HTTP/1.1 在接下来的 15 年左右将非常稳定。

(4)在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP的安全版本。

2.2 HTTP协议的会话方式

浏览器与服务器之间的通信过程要经历四个步骤。

  • 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
  • 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

3、http长连接和短连接

3.1 前提条件

(1)http协议也称为 http/tcp/ip 协议,所以它是面向连接的协议:

  • http是应用层协议,它规定了数据有什么、数据格式是什么,但是怎么发它不管。
  • tcp是传输层协议,http默认使用tcp协议来传输数据。
  • ip是网络层协议,http通过ip地址来确定传输的对象。

(2)由于它是面向连接的协议,所以它连接的时候会出现三次握手,断开连接的时候会出现四次挥手。

3.2 长连接和短连接

上面仅仅是连接,那么长连接和短连接是什么呢?

首先看框框的代码

(1)短连接

(2)长连接

3.3 缓存

4、请求和响应报文

4.1 报文的格式

主体上分为报文首部和报文主体,中间空行隔开:

4.2 请求报文

(1)客户端发给服务端的报文:

(2)请求报文格式

  • 请求首行(请求行)。GET/POST 资源路径?参数 HTTP/1.1;
  • 请求头信息(请求头);
  • 空行;
  • 请求体;

(3)请求行:请求方式、资源路径、协议及版本。

(4)请求头

-主机虚拟地址

Host:localhost:8888

-长连接

Connection:keep-alive

-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]Upgrade-Insecure-Requests:1

-用户系统信息

User-Agent: Mozilla/5.8 (Windows NT 6.1; WOW64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/68.0.3440.75 Safari/537.36

-浏览器支持的文件类型

Accept:text/html,application/xhtml+xml,application/xml;q=0.9, image/webp, image/apng, */*;q=8.8

-当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:可以通过此路径跳转回上一个页面,告计费,防止盗链

Referer:http://localhost:8080/05_web_tomcat/login.html

-浏览器支持的压缩格式

Accept-Encoding:gzip, deflate, br

-浏览器支持的语言

Accept-Language:zh-CN,zh;q=0.9,en-uS;q=0.8,en;g=0.7

(5)请求体:使用form表单发送POST请求,请求体中才有数据。

4.3 响应报文

(1)服务端发给客户端的报文。

(2)响应报文格式:

  • 响应首行(响应行):协议/版本 状态码 状态码描述;
  • 响应头信息(响应头);
  • 空行;
  • 响应体。

(3)响应行:协议及版本、响应状态码、状态描述。

(4)响应头:

Server:Apache-Coyote/1.1 服务器的版本信息

Accept-Ranges:bytes

ETag: W/"157-1534126125811"

Last-Modified:Mon,13 Aug 2018 02:88:45 GMT

Content-Type:text/html 响应体数据的类型[浏览器根据类型解析响应体数据]

Content-Length:157 响应体内容的字节数

Date: Mon,13 Aug 2018 02:47:57 GMT 响应的时间,这可能会有8小时的时区差

(5)响应体,响应某个页面或者某张图片

(6)响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:

  • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
  • 304:使用了本地缓存;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 405:请求的方式不允许:。

5、GET 与 POST 区别

请求

GET

POST

后退按钮/刷新

无害

数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

书签

可收藏为书签

不可收藏为书签

浏览器缓存

能被缓存

不能缓存

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。

历史

参数保留在浏览器历史中。

参数不会保存在浏览器历史中。

对数据长度的限制

是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

无限制。

对数据类型的限制

只允许 ASCII 字符。

没有限制。也允许二进制数据。

安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性

数据在 URL 中对所有人都是可见的。

数据不会显示在 URL 中。


 

本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!

创作不易,如果对你有点帮助的话麻烦点个赞支持一下!

新手小白,欢迎留言指正!


网站公告

今日签到

点亮在社区的每一天
去签到