007 HTTP

文章目录

  • HTTP协议概述
    • 什么是HTTP协议
    • 什么是URL/URI
    • 什么是WEB资源
    • HTTP的作用是什么
  • HTTP协议版本
  • HTTP协议组成
    • 请求协议信息
      • 请求行
        • 请求方法
        • URI
        • 协议/版本
      • 请求头
      • 请求体
    • 响应协议信息
      • 状态行
        • 状态码说明
      • 响应头
      • 响应体
    • GET请求和POST请求的区别
      • 提交数据的方式不同
      • 使用场景不同
      • 传递参数的大小不同

HTTP协议概述

什么是HTTP协议

HTTP协议是建立在客户端和服务器之间的一个应用层协议,在客户端和服务器之间需要数据的传输,而传输数据的时候,我们要按照指定的规则或者叫协议去传输数据。

  • HTTP是建立在TCP/IP协议基础之上的一个网络协议。
  • HTTP协议属于网络七层结构中最上层(应用层)的协议。
  • HTTP协议是一个无状态协议(不会记录每次访问时的信息)
  • HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。

什么是URL/URI

  • URI:Uniform Resource Identifier,统一资源标识符。

它相当于一个网络资源的名称,只是名称的表现形式是/开头的路径形式。

  • URL:Uniform Resource Location,统一资源定位符。
  • URL和URI的区别:URL是URI的子集。

什么是WEB资源

通过浏览器可以访问到的所有资源都是 web资源 ,web资源分为静态资源和动态资源:

  • 动态资源是通过后台程序展示页面数据的,比如Servlet请求。
  • 静态资源的数据是不变的,比如HTML、JPG、AVI。

HTTP的作用是什么

就是为了约束客户端和服务器之间传输web资源时的格式。

HTTP协议版本

HTTP1.1和HTTP1.0版本之间最大的区别是:可以一个连接传输多个web资源。

HTTP协议组成

HTTP协议由两部分组成:请求协议信息和响应协议信息。

请求协议信息

  • 请求协议由哪几部分组成?
  • 请求协议的请求行包含哪些信息?
  • 请求协议的请求头如何理解?请求头中常用的一些配置的作用各自是什么?
  • MIME是什么?常见的MIME类型有哪些?
  • 请求协议的请求体有几种表现形式?

HTTP请求协议信息由三部分组成:请求行、请求头、请求体,简称行头体

请求行

也叫请求首行,它包含四部分(请求方法、URI、协议/版本、回车换行):
GET /user.html HTTP/1.1

请求方法

GET、POST等8种
互联网中WEB资源操作也有增删改查方法,它们分别是POST、DELETE、PUT和GET。

根据HTTP标准,HTTP请求可以使用多种请求方法
HTTP1.0定义了三种请求方法:GET,POST和HEAD方法
HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

序号方法描述
1GET请求指定的页面信息,并返回实体主体
2HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改
4PUT从客户端向服务器传送的数据取代指定的文档的内容
5DELETE请求服务器删除指定的页面
6CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7OPTIONS允许客户端查看服务器的性能
8TRACE回显服务器收到的请求,主要用于测试或诊断
URI

Uniform Resource Identifier,统一资源标识符。它相当于一个网络资源的名称,只是名称的表现形式
是/开头的路径形式。
URL:Uniform Resource Location,统一资源定位符
URL和URI的区别:URL是URI的子集。

协议/版本

表示这次请求是通过哪个协议发送的,比如HTTP协议、HTTPS协议等,使用的HTTP协议一般都是1.1版本的。

请求头

请求头的信息是以[key:value]形式展现的。
一般来说,大多数请求头的信息都不是必须的,我们只需要了解一些常见的请求头信息即可!

请求头说明:

ContentType是请求消息中非常重要的内容,表示请求正文中的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。
Host指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回
Accept浏览器可接受的MIME类型
Accept-Charset浏览器可接受的字符集
Accept-Encoding浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间
Accept-Language浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
Authorization授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
Connection表示是否需要持久连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小
Content-Length表示请求消息正文的长度
Cookie这是最重要的请求头信息之一,可以在客户端记录访问状态。
From请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它
If-Modified-Since只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答
Pragma指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝
Referer包含一个URL,用户从该URL代表的页面出发访问当前请求的页面,使用场景:防盗链、统计网站访问信息。
User-Agent浏览器类型(客户端类型),如果Servlet返回的内容与浏览器类型有关则该值非常有用
UA-Pixels,UA-Color,UA-OS,UA-CPU由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型
  • MIME概述:多用途互联网邮件扩展类型,也叫媒体类型。
  • MIME格式:大类型/小类型,阅读是反过来,比如text/html,读成html文本。
  • 常见MIME类型如下:

text/html: HTML格式
text/plain: 纯文本格式
text/xml: XML格式

image/gif: gif图片格式
imgae/jpeg: jpg图片格式
image/png: png图片格式

以application开头的媒体格式类型:
application/xhtml+xml: XHTML格式
application/xml: XML数据格式
application/atom+xml: Atom XML聚合格式
application/json: JSON数据格式
application/pdf: pdf格式
application/msword: Word文档格式
application/octet-stream: 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : <form encType=" " >中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data: 需要在表单中进行文件上传时,就需要使用该格式

请求体

也叫请求正文。

  • GET请求的请求体是空的,请求参数都是通过请求行传给服务器端。
  • POST请求的请求体可以承载数据,请求头和请求体之间有一个空行作为分割线。
  • 通过表单POST提交的请求体的表现形式主要有三种:
application/x-www-form-urlencoded在发送前编码所有字符(默认)
multipart/form-data不对字符编码。在使用包含文件上传控件的表单时,必须使用该值
text/plain空格转换为"+"加号,但不对特殊字符编码
  • application/x-www-form-urlencoded:会对中文进行URL编码,并且多个参数以&连接,上传文件只能上传文件名称。
  • text/plain:纯文本方式,不会对中文进行URL编码,不会使用&连接多个key-value参数,上传文件只能上传文件名称。
  • multipart/form-data:多部件表现形式,这种方式主要可以完成文件上传,可以将上传的文件名称和文件内容都传递给服务器端。

总结

  • 请求行:请求方法 web资源URI http/1.1
  • 请求头:key value方式,不同的请求头配置会告诉服务器端不同的辅助信息。
  • 请求体:承载传输的具体数据,不过请求体中的数据表现形式有三种,这三种都是通过form表单的
    enctype属性来决定的。

响应协议信息

  • 响应协议由哪几部分组成?
  • 响应协议的状态行包含哪些信息?
  • 状态行中的状态码的含义分别是如何表示的?列出常见的几个状态码及说明?
  • 响应协议的响应头包含哪些头信息?
  • 响应协议的响应体如何理解?

响应协议由哪几部分组成?
响应协议信息,也由三部分组成:状态行、响应头、响应体(响应正文)。

状态行

HTTP/1.1 200 OK
状态行由协议/版本数字形式的状态码状态描述三部分组成。

状态码说明

状态码由三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx: 指示信息–表示请求已接收,继续处理
2xx: 成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法请求
常见的状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

响应头

响应头中的信息也是key value方式展现的。

Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容
LocationLocation响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务 器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源。当我们在JSP中使用重定向语句的时候,服务器 端向客户端发回的响应报头中,就会有Location响应报头域。
ServerServer响应报头域包含了服务器用来处理请求的软件信息。它和User-Agent请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户 端软件(浏览器)和操作系统的信息。下面是Server响应报头域的一个例子Server:Apache-Coyote/1.1
WWW-AuthenticateWWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,这个报头域和前面讲到的Authorization请求报头域是 相关的,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了 Authorization报头域的请求,下面是WWW-Authenticate响应报头域的一个例子:WWW-Authenticate: Basicrealm=“Basic Auth Test!” 从这个响应报头域,可以知道服务器端对我们所请求的资源采用的是基本验证机制。
Content-Length表示响应消息正文的长度
ExpiresExpires实体报头域给出响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面。当用户再次访问这些页面时,直接从缓存中加载并显示给用户,这样缩短了响应的时间,减少服务器的负载。为了让代理服务器或浏览器在一段时间后更新页面,我们可以使用Expires实体报头域指定页面过期的时 间。当用户又一次访问页面时,如果Expires报头域给出的日期和时间比Date普通报头域给出的日期和时间要早(或相同),那么代理服务器或浏览器就 不会再使用缓存的页面而是从服务器上请求更新的页面。不过要注意,即使页面过期了,也并不意味着服务器上的原始资源在此时间之前或之后发生了改变。
Last-ModifiedLast-Modified实体报头域用于指示资源最后的修改日期及时间。
Set-Cookie设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”,…),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
Allow服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept-Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

响应体

响应体,也叫响应正文,里面包含服务器发给客户端的web资源信息。
响应正文信息返回到浏览器时,浏览器需要根据响应头中Content-type设置的MIME类型来打开响应正文信息。

GET请求和POST请求的区别

提交数据的方式不同

GET是通过请求行提交请求参数的。
POST是通过请求体提交请求参数的。

使用场景不同

GET请求的目的是获取到数据,简单点说,就是客户端向服务器端要东西
POST请求的目的是给服务器提交数据。就是客户端向服务器端给东西。

传递参数的大小不同

GET请求是通过请求行中的请求URL传递给客户端的。HTTP协议对请求URL的长度没有限制,但是不同的
浏览器对请求URL长度是由限制的。
POST请求是通过请求体传递请求参数的。

总之POST传递的请求参数大小比GET方式要大,要多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis慢查询

Redis慢查询 目录 Redis慢查询慢查询配置慢日志操作返回参数介绍 Redis的慢查询就是当命令执行时间超过预定的阈值后将这条命令记录下来&#xff0c;与MySQL的功能类似 慢查询配置 默认阈值是10毫秒&#xff0c;即10000微秒 临时修改阈值为20毫秒 127.0.0.1:6379> confi…

汽车零部件材料耐候性测试氙光太阳辐射系统试验箱

概述 汽车零部件等领域的材料耐候性测试是一项关键的质量控制环节&#xff0c;它关乎汽车部件在各种气候条件下的性能表现和寿命。塑料件光照老化实验箱&#xff0c;即氙灯老化试验箱&#xff0c;在其中扮演着至关重要的角色。通过模拟自然环境中的光照、温度、湿度等条件&…

哈希表(C++实现)

文章目录 写在前面1. 哈希概念2. 哈希冲突3. 哈希函数4.哈希冲突解决4.1 闭散列4.1.1 线性探测4.1.2 采用线性探测的方式解决哈希冲突实现哈希表4.1.3 二次探测 4.2 开散列4.2.2 采用链地址法的方式解决哈希冲突实现哈希表 写在前面 在我们之前实现的所有数据结构中(比如&…

分享一个用于深入分析【大模型LLM】工作原理的工具

背景 LLM Transparency Tool 是一个用于深入分析和理解大型语言模型&#xff08;LLM&#xff09;工作原理的工具&#xff0c;旨在增加这些复杂系统的透明度。它提供了一个交互式界面&#xff0c;用户可以通过它观察、分析模型对特定输入&#xff08;prompts&#xff09;的反应…

Java案例找素数(三种方法)

目录 一&#xff1a;问题&#xff1a; 二&#xff1a;思路分析&#xff1a; 三&#xff1a;具体代码&#xff1a; 四&#xff1a;运行结果&#xff1a; 一&#xff1a;问题&#xff1a; 二&#xff1a;思路分析&#xff1a; 三&#xff1a;具体代码&#xff1a; Ⅰ&#xf…

硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140110514 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

【Mybatis 与 Spring】事务相关汇总

之前分享的几篇文章可以一起看&#xff0c;形成一个体系 【Mybatis】一级缓存与二级缓存源码分析与自定义二级缓存 【Spring】Spring事务相关源码分析 【Mybatis】Mybatis数据源与事务源码分析 Spring与Mybaitis融合 SpringManagedTransaction&#xff1a; org.mybatis.spri…

YOLOv8各种改进模型在Jetson Orin NX上面的部署与实验对比

一 环境配置 1.1 Jetson平台的GPU版本torch与torchvison的安装 一般在使用YOLOv8时候,通常由两种模式: 1)pip install ultralytics :不需要修改模型的话,直接用这个方便 2) pip installl requirement.txt -r:对模型结构修改的话只能用这个 作者是为了对模型进行改进…

跨域不一定不能共享 cookie

Cookie的域名共享机制主要基于以下几个原则: 同一域名下的不同子域名可以共享cookie。例如&#xff0c;www.example.com和blog.example.com可以共享设置为.example.com域的cookie. Cookie的域名属性(Domain)决定了哪些域名可以访问该cookie。服务器可以手动设置Domain属性,默认…

如何实现Action菜单

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容&#xff0c;本章回中将介绍自定义Action菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

代码随想录第六十一天 单调栈part01 739.每日温度 496.下一个更大元素 I 503.下一个更大元素II

关键点 使用条件&#xff1a;一维数组&#xff0c;想要寻找任一个元素的右边或者左边比第一个自己大或小的元素的位置&#xff1b; 原理&#xff1a;空间换时间&#xff0c;遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素&#xff1b; 维护单调栈&#xff1a;…

【C++ Primer Plus学习记录】函数和数组

假设使用一个数组来记录家庭野餐中每人吃了多少个甜饼&#xff08;每个数组索引都对应一个人&#xff0c;元素值对于这个人所吃的甜饼数量&#xff09;。现在想知道总数。这很容易&#xff0c;只需要使用循环将所有数组元素累积起来即可。将数组元素累加是一项非常常见的任务&a…

皮下出血点

跟晒太阳的关键性很强&#xff0c;因为右手更严重&#xff0c;且右手手背正片红。 肝不好&#xff0c;手臂上有很多小红点&#xff0c;可能是毛细血管瘤&#xff0c;也可能是皮下出血点&#xff0c;表现形式不同&#xff0c;具体原因和处理措施不同。 1、毛细血管瘤&#xf…

机器人控制系列教程之并联机器人简介

背景 根据其构件的连接是否构成闭环形式&#xff0c;机器人可分为串联机器人和并联机器人两种。对于串联机器人&#xff0c;其所有的构件以串联的结构形式连接起来&#xff0c;在空间组成一种开环结构&#xff0c;因而具有工作空间大&#xff0c;灵活性好等优点&#xff0c;但…

【避雷实测】宠物空气净化器怎么选?希喂、小米、安德迈谁更值得入手!

不知道家里养猫的朋友们有没有注意到&#xff0c;每逢春夏季节&#xff0c;无论是户外还是室内&#xff0c;我们的鼻子常常感到痒痒的。户外的痒感往往是因为那些飘散的杨柳絮&#xff0c;而在室内&#xff0c;这种痒感很可能是由于猫主子的毛发飘浮在空气中所引起的。 为了能…

Qt:8.QWidget属性介绍(focuspolicy属性-控件焦点、stylesheet属性-为控件设置样式)

目录 一、focuspolicy属性-控件焦点&#xff1a; 1.1focuspolicy属性介绍&#xff1a; 1.2设置焦点策略——setFocusPolicy()&#xff1a; 1.3获取控件的焦点策略——focusPolicy()&#xff1a; 二、stylesheet属性——为控件设置样式&#xff1a; 2.1 stylesheet属性介绍…

Golang-map理解

golang-map语雀笔记整理 map的底层实现hmapbmap map是如何做到O(1)的复杂度的&#xff1f;map扩容策略 师兄问题回答 map的底层实现 hmap hmap的结构体核心字段有&#xff1a;buckets 桶数组地址&#xff0c; B 定位值&#xff0c;桶的数目是2^B个&#xff0c; count 当前map的…

黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401

经过多方探索&#xff0c;这个✓8错误就是由于黑马点评使用了拦截器&#xff0c;我们直接发送请求是会被拦截器拦截下来的&#xff0c;我给出的解决方案是通过配置Postman解决&#xff0c;方法很简单&#xff01; 解决方案 右边的value写上Redis里面登录所用token值就可以了…

使用zdppy_api+onlyoffice word文档在线共同编辑,附完整的vue3前端代码和python后端代码

参考文档&#xff1a; https://api.onlyoffice.com/zh/editors/basic https://api.onlyoffice.com/zh/editors/coedit 基本的架构思考&#xff1a; 文档表&#xff1a;记录的是文档信息 key&#xff1a;这个key可以标识唯一的一个文档&#xff0c;可以是文档的hash值fileType…

HttpServletResponse设置headers返回,发现headers中缺少“Content-Length“和“Content-Type“两个参数。

业务中需要将用httpUtils请求返回的headers全部返回&#xff0c;塞到HttpServletResponse中&#xff0c;代码如下&#xff1a; HttpServletResponse response;// 返回headers Arrays.stream(httpResponse.getHeaders()).forEach(header -> response.setHeader(header.getNa…