HTTP协议详解

Http详解

 1.1:什么是Http

HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。

 1.2:Http协议简介

HTTP被设计于20世纪90年代初期,是一种可扩展的协议。它是应用层的协议,通过TCP,或者是TLS-加密的TCP连接来发送,理论上任何可靠的传输协议都可以使用。因为其良好的扩展性,时至今日,它不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如HTML表单这样的信息。HTTP还可以根据网页需求,仅获取部分Web文档内容更新网页。

 1.3:http报文分类

HTTP报文的分类有两种:请求报文和响应报文。顾名思义,请求报文就是客户端向服务端发送请求的信号,响应报文就是服务端响应处理后回传给客户端的信号。

 请求报文

1:Http请求报文组成

 HTTP 请求报文由四部分组成,分别是请求行、请求头、空行和请求体,其中空行也是组成部分之一,作用是进行分隔,必不可少。

2:请求行

第一行为请求行,由请求方法、URI和HTTP协议版本3个字段组成,它们之间用空格分隔,最后以回车和换行符结尾进行内容分割,表示接下来的内容(下一行开始的)不是请求行的内容。举例,GET /index.php HTTP/1.1,GET是请求方法,/index.php是URL,HTTP/1.1表示使用的HTTP版本为1.1。

这一行比较好理解,只有请求方法的类型比较多,有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中GET、POST最为常用,这里详细介绍下。

GET

GET最为常见的请求方式,通常用于当客户端要从服务器中读取文档时,比如点击网页上的链接或者通过在浏览器的地址栏输入网址的方式来浏览网页,使用的都是GET方式。需要注意的是使用GET方法请求时,请求参数和对应的值是跟在URL后面,通过问号(“?”)和and连接符(“&”)以及“=”号连接。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。例如,/index.php?id=100&slec=yes,这样通过GET方式传递的数据直接表示在地址中。正式因为要传递的参数和值已经存在于URL中,所以采用GET方法请求的HTTP报文是没有请求体的。

很明显,GET方法把参数以及参数值都暴露在URL中了,好处显而易见,弊端就是不利于数据的保密和安全。另外浏览器对地址的字符长度是有限制的,虽然各自的标准不同,但一般不超过1024个字符,所以如果要传输的数据量比较大,不宜采用GET方法。

POST

 POST也是非常常见的请求方式,并且完美弥补了GET方法的不足。因为POST方法将要传输的数据封装在报文的请求体中,并且对传输的数据大小没有限制,所以可以传输大量的数据,并且因为数据封装在请求体中,没有直接暴露在URL中,所以比较私密和安全。

其他 请求方式

其他请求方式用得比较少,其中HEAD方法偶尔用到,服务端接受到HEAD请求后只返回响应头,而不会发送响应内容,这样就提高了传输效率。所以当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的。

 3:请求头

  • 请求头部由键/值对组成,每行一对,键和值用冒号“:”(英文)分隔。请求头部告知服务器所有有关于客户端请求的信息,典型的请求头有:
  • User-Agent:产生请求的用户代理信息(浏览器信息): Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36等;
  • Accept:客户端可识别的内容类型列 :text/html,application/xhtml+xml,application/xml;
  • Accept-Language:客户端可接受的自然语言 - zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4;
  • Accept-Encoding:客户端可接受的编码压缩格式 - gzip, deflate, sdch, br
  • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
  • connection:连接方式,有close和keep-alive两种。
  • close:告诉WEB服务器或代理服务器,在完成本次请求的响应后,断开连接
  • keep-alive:告诉WEB服务器或代理服务器。在完成本次请求的响应后,保持连接,以等待后续请求
  • Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie - PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255;

4:空行

 用户进行内容分割,表示请求头到此为止,下一行的内容不再是请求头。

5:请求体

请求体包含的就是请求数据,正如上文提到的,当使用的是GET方法的时候,没有请求体。

 响应报文

客户端向服务端发送请求之后,服务器接收并处理客户端发过来的请求后正常情况下会返回一个HTTP的响应消息,这个就是响应报文。

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。形式上除了状态行之外,其他三个部分与请求报文类似。

1 :状态行

  • 格式为:HTTP-Version Status-Code Reason-Phrase CRLF。其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
  • 1xx:指示信息--表示请求已接收,继续处理。
  • 2xx:成功--表示请求已被成功接收、理解、接受。
  • 3xx:重定向--要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误--请求有语法错误或请求无法实现。
  • 5xx:服务器端错误--服务器未能实现合法的请求。
  • 各类型常见状态代码、状态描述的说明如下:
  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

 2:响应头

  • 和请求报文的请求头类似,响应头也由键值对组成,每行一对,键和值用英文冒号 : 分隔。响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息,典型的响应头有:
  • Server:包含处理请求的原始服务器的软件信息;
  • Date:服务器日期;
  • Content-Type:返回的资源类型 (MIME);
  • Connection:连接方式;
  • close:连接已经关闭;
  • keep-alive:连接已保持,在等待本次连接的后续请求;
  • Cache-Control:缓存控制;
  • Expires:设置过期时间;
  • Set-Cookie:设置 Cookie 信息。

3:空行 

 作为内容分割,表示以下不再是响应头的内容。

 4: 响应体

这个是服务器返回给浏览器的响应信息。

 http协议 ******* 面试

 
http(HyperText transport protocol)协议
超文本传输协议
客户端和服务器端进行交互遵循的通信协议 
请求报文:请求头 请求行 请求体
请求头: Authorization Content-Type 
请求行:get url http1.1(http1.0,http1.1,http2)
请求体:get携带参数不再请求体中 在url地址栏
            post 携带参数在请求体中 
响应报文:响应头 响应行 响应体
响应头:Content-Type
响应行:http1.1 200 OK(状态码描述)
响应体:{status:200,message:"更新成功",data:[{name:"zhangsan"},{}]}
GET和Post方法区别? **********
GET:
    1.get携带的参数携带在url地址栏 数据保密不安全
    2.传输的数据大小有限制 一般不超过1024个字符
POST:
    1.post携带的参数携带在请求体中,数据保密安全
    2.传输的数据大小没有限制 一般可以传输大量数据

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340