http协议及请求与响应协议

学习网址:
https://www.bilibili.com/video/BV1yx411s762?from=search&seid=1356404272255517805

http协议简介和请求响应

HTTP,Hyper Text Transfer Proto[ol, 超文本传输协议,是一-个基于请求与响应模式的、无
状态的网络协议,是浏览器和服务器间最常用的通讯协议。HπTP协议是浏览器与服务器间
的数据传递格式的一种约定,浏览器与服务器只要都遵循这个约定,就可进行数据通讯了。

请求与响应

由浏览器向服务器发送数据,称为请求Request。由服务器向浏览器发送数据,则称为响应Response。 那么,什么才是浏览器向服务器发送的请求呢?在浏览器地址栏中通过地址访问是最典型的请求方式,另外还有点击表单的提交按钮、点击超链接、发送AJAX请求,那么还有其它形式的请求吗?我们要查看地址栏所发出的请求详情,可以通过抓包工县来拦截HTTP请求与响应,从工具中可以看到具体的请求与响应内容。抓包工具很多,最常用的是HttpWatch。

HTTP版本

客户端若要向服务端发出请求,必须首先在它们之间创建一个TCP(Transfer Control Protocal,传输控制协议)连接。而当客户端与服务端的通讯结束后,TCP连接将被关闭。而这个连接就是基于HTTP协议的。
请注意一点:从“计算机网络通信”细节上来说, TCP连接的建立需要经过“三次握手”,TCP连接的关闭需要经过“四次通信”。后面的学习只是从简单的原理上进行分析,不进行网络通信细节上的讲解了。在通讯中真正使用的HTTP协议,共有两种: HTTP1.0 版与HTTP1.1版。这两个版本目前都仍在使用中。(默认使用1.1)

HTTP1.0版本

HTTP1.0协议规定,客户端若要向服务端发出请求,必须首先在它们之间创建一个TCP (TransferControlProtocal,传输控制协议)连接。而当客户端接收到服务端所发出的响应后,服务端将关闭TCP连接。只有等待上一次的请求所对应的响应被客户端接收到后,客户端才可发出第二次请求。HTTP1.0 协议中的连接属于非持久连接,且服务器不跟踪和记录任何一次请求与响应。

HTTP1.1版本

HTTP 1.1版本是目前浏览器默认采用的HTTP协议版本,是一种持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多css、JS、图片等资源的页面,其所发出的多个请求和响应可以在一个连接中传输。但每个单独的页面文件的请求和响应仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务
器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。
HTTP1.0在客户端接收到服务端发送来的响应后,TCP连接马上关闭。而HTTP1.1的连接是什么时候关闭呢?客户端在发送创建TCP连接请求之前首先计算出本次连接浏览器所要发送的请求数量,即一次手工请求加上其所携带的所有自动请求数量。当所有浏览器所发出的请求全部发送完毕后,客户端会再自动发送一个关闭TCP 连接的请求。这个请求在HttpWatch中是看不到的。
为了防止服务器主动将TCP连接关闭,在每一个请求中都携带了一个参数Connection,用于告诉服务器是否关闭连接。在HttpWatch中可以看到的这些请求中,其Connection参数值均为Keep-Alive保持连接。只有当客户端发送了关闭TCP连接请求时,服务器才会将TCP,连接关闭。
当然,除了改进了HTTP1.0协议的性能问题外,HπP1.1还通过增加更多的请求头和响应头来改进和扩充HTTP 1.0 的功能。例如,由于HTTP1.0不支持Host请求头属性,WEB浏览器无法使用主机域名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机域名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求的响应后后仍然保持连接;Connection请求头的值为close时,客户端通知服务器关闭连接。

请求协议

在学习请求协议格式之前,首先要了解两个概念: URL 与URI。
URL: Uniform Resource Locator, 统一资源定位符。是互联网上标准资源的地址,可以在全球范围内唯一的确定一个资源。
URI: Unform|Resource Identifier,统一资源标识符,用于标识-一个资源的名称。通过这种名称命名的资源可以被互联网定位和访问。

请求协议规定,请求的信息格式包括四部分:请求行、请求报头、空白行,与请求正文。
请求行:以请求提交方式名开头(大写)后跟请求的URI,最后是请求协议及版本号。
请求报头:存放着各种请求参数及值,其格式为“参数名:参数值”。。
空白行:用于分离请求报头与请求正文。
请求正文:存放请求还携带的参数及值。

请求如下如所示(请求正文为空),四个红框表示四种类型:
在这里插入图片描述

响应协议

一.响应协议的格式如下:
1.响应首行 2.响应头信息 3.空行 4.响应体

二.post请求:
1.数据不会出现在地址栏中
2.数据的大小没有上限
3.有请求体
4.请求体中如果存在中文,会使用url编码

三.get请求
http协议默认的请求方式是get请求
1.get请求数据会暴露在浏览器地址栏中
2.没有请求体
3.数据必须在4k内

响应如下如所示,四个红框表示四种类型:
在这里插入图片描述

状态码

当进行Web应用访问时,经常会看到一些4开头或5开头的提示信息页面。这些就是HTTP协议制定的,让服务器传递给浏览器的状态码,表示服务器对当前请求的处理状态。

常用状态码.
常用的状态码以2、4、5开头,分别表示的意义为:。
2xx:表示对请求计算与响应成功。其中常用的状态码是200。。
4xx: 表示请求错误。其中常见的状态码是404, 表示资源找不到。一般都是请求路径书写有问题。
5xx:表示服务端错误。其中常见的状态码是500, 表示服务器内部错误。一般都是服务端的Java代码发生错误。

4.4.2 指定默认错误页面。
当发生诸如404、500 错误时,Web容器给出一个英文提示的页面。若系统给出这样的页面,则说明系统设计的界面不友好。不过,在web.xml中允许应用指定默认的错误码所对应的错误页面。只要服务端向客户
端浏览器发出指定的状态码,则系统就会自动跳转到指定页面。

GET与POST请求方式

由于GET请求会将请求所携带的参数作为请求URL中的一部分出现,所以请求参数会.显示在地址栏。而这就导致了GET提交的三点不足:。
1 参数值只能是字符串, 而不能是其它类型。
2 可以携带的数据量小。
3 数据安全性低。
但GET请求有一一个很重要的特征:客户端一旦接收到“服务器向GET请求发送的响应后,浏览器会自动缓存响应。当客户再次进行相同请求提交时,将直接读取本地浏览器缓存中数据,而不再向服务端真正发送数据,让用户感觉服务端的响应很快,提升用户体验,减轻了服务器压力。

POST请求会将请求所携带的数据以请求正文的形式出现,所以与GET方式相比,就显示出了两点长处:。
数据类型可以是任意类型,还可以是声音、视频、图片等文件。请求可以携带的数据量大。
数据安全性高,但发出POST请求的客户端浏览器不会对接收到的“服务器向POST请求发送的响应”进行缓存。当用户再次进行相同请求时,仍是真正向服务器发送的请求,从服务器读取的数据。

为什么要设计为“GET请求的响应结果会被浏览器缓存,POST 请求的响应结果不会被浏览器缓存”呢?主要有两点原因。
1 一个原因是,以不同的方式提交请求其目的也是不同的。GET请求的目的一般是客户端要从服务端下载资源,发送相同的请求就代表要下载相同的资源。既然要下载相同的资源而这些资源已经被下载到了客户端,那么就无需再下载了。所以也就无需再向服务器发送真正的下载请求了。所以就将GET提交方式设计为了“GET请求的响应结果会被浏览器缓存”。但POST请求的目的一般是客户端要向服务器端上传资源。对于向服务器端上传资源后响应结果,浏览器是无需缓存的。
2 另一个原因是,是否是相同的请求,两种提交方式的比较难易程度是不同的。GET提交方式的请求只包含请求行、请求头与空行三部分,请求体为空。所以第二次请求与前一次请求是否相同,浏览器很好做出比较。但POST提交方式所包含的数据量比较大,主要体现在请求正文内容较多上。请求正文可以是图片、音频、视频等文件,而对第二次请求与前一次请求是否相同的比较,仅从这些内容来看就已经很不好比较了。即对于POST提交,是否是相同请求的提交是不好做出比较的,或者说是无法进行比较的。所以将POST提交方式设计为了“pOsT请求的响应结果不会被浏览器缓存”。

默认请求方式:
在这里插入图片描述

请求选择方式

根据以。上叙述,具有以下几种情况之一-的,选择POST提交方式。其它均采用GET提交方式。
➢提交时所携带 的数据类型不是字符串。
➢提交时所携带的数据量比较大。
➢提交时所携带的数据具有敏感性,安全性要求较高。
为什么POST提交的安全性就高了?因为能够实现POST提交的方式只有两种:通过表单的POST提交,与通过AJAX的POST提交。其它方式均为GET提交方式。对于一个提供了POST登录页面的系统,若用户试图通过地址栏等方式进行登录,则说明其-定是非法登录。
也就是说,只要我们设置系统的登录请求提交方式是POST,那么就会出现以下两种情况:
➢若用户以POST方式提交登录请求,我们无法判断其是否是非法登录。因为他有可能是通过其它表单的posT方式提交的登录请求。。
➢若用户以GET方式提交登录请求,则马上就可以判断其是非法登录。
基于以上原因,POST 提交方式的安全性要高于GET提交方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛阳八中我最棒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值