首页 > 编程语言 >JavaWeb(10) HTTP协议

JavaWeb(10) HTTP协议

时间:2024-08-01 22:53:51浏览次数:18  
标签:10 HTTP JavaWeb 请求 1.1 服务器 浏览器 客户端

一、HTTP协议

1.定义

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

2.各版本介绍

(1)HTTP/0.9

  • 蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在 1989 年创建了单行 HTTP 协议。它只是返回一个网页。这个协议在 1991 年被命名为 HTTP/0.9。

(2)HTTP/1.0

  • 1996 年,HTTP/1.0 发布。该规范是显著扩大,并且支持三种请求方法:GET,Head,和POST。

  • HTTP/1.0 相对于 HTTP/0.9 的改进如下:

    • 每个请求都附加了 HTTP 版本。

    • 在响应开始时发送状态代码。

    • 请求和响应都包含 HTTP 报文头。

    • 内容类型能够传输 HTML 文件以外的文档。

  • 但是,HTTP/1.0 不是官方标准。

(3)HTTP/1.1

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

  • HTTP/1.1 是 HTTP 1.0 的增强:

    • 虚拟主机允许从单个 IP 地址提供多个域。

    • 持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求。

    • 缓存支持节省了带宽并使响应速度更快。

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

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

  • 在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。

(4)HTTP/2

  • 由IETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使Web应用更加快速、高效和可靠。

  • 多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1 一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量。

  • 二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。

  • 头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。

  • 服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。

  • 改进的安全性:HTTP/2 默认使用 TLS(Transport Layer Security)加密传输数据,提高了安全性。

  • 兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1 共存,服务器可以同时支持 HTTP/1.1 和 HTTP/2。如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。

(5)HTTP/3

  • 于 2021 年 5 月 27 日发布 , HTTP/3 是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012 年开发的新协议 QUIC

  • HTTP/3 是继 HTTP/1.1 和 HTTP/2之后的第三次重大修订。

  • HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。

  • 目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。


二、报文

1.报文的格式

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

  • 报文首部:服务端或客户端需要处理的请求或相应的内容及属性
    • 报文部首可以继续细分为 "行" 和 "头"
  • 报文主体:应该被发送的数据

2.请求报文

(1)定义

        客户端发给服务端的报文

(2)请求报文格式

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

浏览器 f12 网络下查看请求数据包

(3)form表单发送GET请求特点

  • 由于请求参数在请求首行中已经携带了,所以没有请求体,也没有请求空行
  • 请求参数拼接在url地址中,地址栏可见[url?name1=value1&name2=value2],不安全
  • 由于参数在地址栏中携带,所以由大小限制[地址栏数据大小一般限制为4k],只能携带纯文本
  • get请求参数只能上传文本数据
  • 没有请求体。所以封装和解析都快,效率高, 浏览器默认提交的请求都是get请求比如:地址栏输入回车,超链接,表单默认的提交方式

(4)查看GET请求行,请求头,请求体

  • 请求行组成部分

    • 请求方式 GET

    • 访问服务器的资源路径?参数1=值1&参数2=值2 ... ...

    • 协议及版本 HTTP/1.1

GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
  • 请求头

-主机虚拟地址
Host: localhost:8080   
-长连接
Connection: keep-alive 
-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests: 1  
- 用户系统信息
User-Agent: Mozilla/5.0 (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=0.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;q=0.7
  • 请求空行

  • 请求体

    • GET请求数据不放在请求体

(5)form表单发送post请求特点

  • POST请求有请求体,而GET请求没有请求体。
  • post请求数据在请求体中携带,请求体数据大小没有限制,可以用来上传所有内容[文件、文本]
  • 只能使用post请求上传文件
  • post请求报文多了和请求体相关的配置[请求头]
  • 地址栏参数不可见,相对安全
  • post效率比get低
  • POST请求要求将form标签的method的属性设置为post

(6)查看post的请求行 请求头 请求体

  • 请求行组成部分

    • 请求方式 POST

    • 访问服务器的资源路径?参数1=值1&参数2=值2 ... ...

    • 协议及版本 HTTP/1.1

POST /05_web_tomcat/login_success.html HTTP/1.1
  • 请求头

Host: localhost:8080
Connection: keep-alive
Content-Length: 31     -请求体内容的长度
Cache-Control: max-age=0  -无缓存
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1  -协议的自动升级
Content-Type: application/x-www-form-urlencoded   -请求体内容类型[服务器根据类型解析请求体参数]
User-Agent: Mozilla/5.0 (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=0.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;q=0.7
Cookie:JSESSIONID-
  • 请求空行

  • 请求体:浏览器提交给服务器的数据

username=admin&password=123456

3.响应报文

(1)响应报文格式

  • 响应首行(响应行); 协议/版本 状态码 状态码描述

  • 响应头信息(响应头);

  • 空行;

  • 响应体;

  • 响应行组成部分

    • 协议及版本 HTTP/1.1

    • 响应状态码 200

    • 状态描述 OK (缺省)

HTTP/1.1 200 OK
说明:响应协议为HTTP1.1,响应状态码为200,表示请求成功; 
  • 响应头

Server: Apache-Coyote/1.1   服务器的版本信息
Accept-Ranges: bytes
ETag: W/"157-1534126125811"
Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT
Content-Type: text/html    响应体数据的类型[浏览器根据类型解析响应体数据]
Content-Length: 157   响应体内容的字节数
Date: Mon, 13 Aug 2018 02:47:57 GMT  响应的时间,这可能会有8小时的时区差
  • 响应体

<!--需要浏览器解析使用的内容[如果响应的是html页面,最终响应体内容会被浏览器显示到页面中]-->
​
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
    恭喜你,登录成功了...
  </body>
</html>


三、响应状态码

状态码状态码英文描述中文含义
1**
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2**
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
3**
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
4**
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
5**
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

总结

        本篇对HTTP协议进行了梳理与总结,便于学习和应用。部分内容源自网络,如有侵权,请联系作者删除处理,谢谢!

标签:10,HTTP,JavaWeb,请求,1.1,服务器,浏览器,客户端
From: https://blog.csdn.net/Theodore_1022/article/details/140742425

相关文章

  • tpmtool 描述:     此实用程序可用于获取有关受信任的平台模块(TPM)的信息。    
     tpmtool|MicrosoftLearntpmtool描述:  此实用程序可用于获取有关受信任的平台模块(TPM)的信息。  有关最新文档,请转到https://aka.ms/tpmtool语法:  tpmtool[parameter][<参数>]参数:  GETDEVICEINFORMATION          显示......
  • 洛谷 P1052 [NOIP2005 提高组] 过河
    原题https://www.luogu.com.cn/problem/P1052题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:1,⋯,L......
  • 1000W长连接,如何建立和维护?千万用户IM 架构设计
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • PAT甲级 1037 Magic Coupon (测试点4超时)
    ThemagicshopinMarsisofferingsomemagiccoupons.EachcouponhasanintegerNprintedonit,meaningthatwhenyouusethiscouponwithaproduct,youmaygetNtimesthevalueofthatproductback!Whatismore,theshopalsoofferssomebonusprod......
  • 5G CPE SC100:5G时代的旗舰级无线路由器
    作为星创易联CPE无线路由器SC100的产品经理,我很高兴能够与大家分享这款产品的特点和使用体验。经过我们团队的不懈努力,SC100终于面世,它集多项领先技术于一身,定位高端市场,希望能给用户带来极致的上网体验。下面就让我从硬件规格、无线性能、接口丰富程度、指示灯设计、便携性......
  • C221027B
    B抽\(n\)次卡,连续\(i\)次没有抽中时,第\(i+1\)次抽中的概率是\(p_i\),规定\(p_k=1\),求期望抽中次数.标签:矩阵加速递推,动态规划.暴力:记\(f[i][j]\)表示已经抽了\(i\)次,目前连续\(j\)次不中的期望抽中次数,有转移:\[f[i][j]=f[i-1][j-1]\times(1-p......
  • 微信小程序教程010:列表渲染
    文章目录列表渲染1、wx:for2、手动指定索引和当前项的变量名3、wx:key的使用列表渲染1、wx:for通过wx:for可以根据指定的数组,循环渲染重复的组件结构,语法结构如下:<viewwx:for="{{array}}"> 索引是:{{index}},当前项是:{{item}}</view>定义数......
  • 小程序http封装
    constui=require('./ui');constBASE_URL='http://119.23.227.211:8011'/***网络请求request*obj.data请求接口需要传递的数据*obj.showLoading控制是否显示加载Loading默认为false不显示*obj.contentType默认为application/json*obj.method请求......
  • 计算机基础(Windows 10+Office 2016)教程 —— 第5章 文档编辑软件Word 2016(上)
    文档编辑软件Word20165.1Word2016入门5.1.1Word2016简介5.1.2Word2016的启动5.1.3Word2016的窗口组成5.1.4Word2016的视图方式5.1.5Word2016的文档操作5.1.6Word2016的退出5.2Word2016的文本编辑5.2.1输入文本5.2.3插入与删除文本5.2.4复制与......
  • win10 in arm
    记得流水账了,非技术控跳过即可。10年前,早在win10刚出的那些天,就浏览到有支持arm架构的信息,只是未见缘来打怪,磨蹭到微软快要取消支持的了,方哦,哦,哦...老板的华为平板cpu是枭龙850+8g内存,64位家庭版。平板上旧系统中了comup.dll的毒,一阵删杀后把系统给搞崩了,失了细究的条件。系统可......