详解HTTP(HTTP知识总结)
本文的主要内容
- HTTP 是什么
- URL 详解
- HTTP 之请求篇
- HTTP 之响应篇
1. HTTP是什么
1.1 概述
HTTP 全称是 HyperText Transfer Protocal
,即:超文本传输协议,从 1990 年开始就在 WWW 上广泛应用,是现今在 WWW 上应用最多的协议,HTTP 是应用层协议,当你上网浏览网页的时候,浏览器和 web 服务器之间就会通过 HTTP 在 Internet 上进行数据的发送和接收。HTTP 是一个基于请求/响应模式的、无状态的协议。即我们通常所说的 Request/Response
1.2 特点
- 支持用户端/服务器模式
- 简单快速:用户向服务器请求服务时,只要传送请求方法和路径。因为 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因此通信速度很快
- 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记
- 无连接:无连接的含义是限制每次链接只解决一个请求。服务器解决完用户的请求,并收到用户的应答后,即断开链接,采用这种方式可以节省传输时间
- 无状态:HTTP 协议是无状态协议。无状态是指协议对于事物解决没有记忆能力。缺少状态意味着假如后续解决需要前面的信息,则它必需重传,这样可能会导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就比较快
2. URL详解
2.1 简介
URL(Uniform Resource Locator)是统一资源定位符的简称,有时候也被俗称为网页地址(网址),好像是网络上的门牌,是因特网上标准的资源的地址
2.2 基本组成
通用的格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
名称 | 功能 |
---|---|
scheme | 访问服务器以获取资源时要使用哪种协议,比方,http,https 和 FTP 等 |
host | HTTP 服务器的 IP 地址或者域名 |
port# | HTTP 服务器的默认端口是 80,这种情况下端口号可以省略,假如使用了别的端口,必需指明,例如www.geekjc.com:8080 |
path | 访问资源的路径 |
query-string | 发给 http 服务器的数据 |
anchor | 锚 |
举个例子
https://www.geekjc.com/comtainerlist?t=postlist&p=0#stuff
其中
名称 | 对应的字段 |
---|---|
scheme | https |
host | www.geekjc.com |
path | /comtainerlist |
query-string | t=postlist&p=0 |
anchor | stuff |
再来张比较直观的图
URL组成
3. HTTP 之请求篇
HTTP 的请求报文分为三个部分:请求行、请求头、请求体
请求报文
3.1 请求行
请求行(Request line)分为三个部分:请求方法、请求地址和协议版本
请求方法
HTTP/1.1 协议中共定义了八种方法(也叫“动作”)来以不同的方式操作指定的资源
方法名 | 功能 |
---|---|
GET | 向指定的资源发出“显示”请求,使用 GET 方法应该只用在读取数据上,而不应该用于产生“反作用”的操作中 |
POST | 指定资源提交数据,请求服务器进行解决(例如提交表单或者者上传文件)。数据被包含在请求文本中。这个请求可能会创立新的资源或者者修改现有资源,或者两者皆有。 |
PUT | 向指定资源位置上传其最新内容 |
DELETE | 请求服务器删除 Request-URI 所标识的资源 |
OPTIONS | 使服务器传回该资源所支持的所有HTTP请求方法。用*来代替资源名称,向 Web 服务器发送 OPTIONS 请求,可以测试服务器功能能否正常运作 |
HEAD | 与 GET 方法一样,都是向服务器发出指定资源的请求,只不过服务器将不传回资源的本文部分,它的好处在于,使用这个方法可以在不必传输一律内容的情况下,即可以获取其中关于该资源的信息(原信息或者称元数据) |
TRACE | 显示服务器收到的请求,主要用于测试或者诊断 |
CONNECT | HTTP/1.1 中预留给能够将连接改为通道方式的代理商服务器。通常用于 SSL 加密服务器的链接(经由非加密的 HTTP 代理商服务器) |
其中,最常见的是 GET 和 POST 方法,假如是 RESful 接口的话一般会用到 PUT、DELETE、GET、POST(分别对应增删查改)
3.2 请求头
请求头可用于传递少量附加信息,格式为:键: 值
,注意冒号后面有一个空格:
请求头
请求和响应常见通用的 Header
名称 | 作用 |
---|---|
Content-Type | 请求体/响应体的类型,如:text/plain、application/json |
Accept | 说明接收的类型,可以多个值,用,(英文逗号)分开 |
Content-length | 请求体/响应体的长度,单位字节 |
Content-Encoding | 请求体/响应体的编码格式,如 gzip、deflate |
Accept-Encoding | 告知对方我方接受的 Content-Encoding |
ETag | 给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制 |
Cache-Control | 取值一般为no-cache、max-age=xx,xx为整数,表示资源缓存有效期(秒) |
常见的请求 Header
名称 | 作用 |
---|---|
Authorization | 用于设置身份认证信息 |
User-Agent | 客户标识,如:OS 和浏览器的类型和版本 |
If-Modified-Since | 值为上一次服务器返回的Last-Modified值,用于确定某个资源能否被更改过,没有更改过就从缓存中读取 |
If-None-Match | 值为上一次服务器返回的 ETag 值,一般会和If-Modified-Since |
Cookie | 已有的Cookie |
Referer | 标识请求引用自哪个地址,比方你从页面 A 跳转到页面 B 时,值为页面 A 的地址 |
Host | 请求的主机和端口号 |
3.3 请求体
请求体(又叫请求正文)是 post 请求方式中的请求参数,以 key = value 形式进行存储,多个请求参数之间用&连接,假如请求当中请求体,那么在请求头当中的 Content-Length 属性记录的就是该请求体的长度
包含请求体的请求消息
根据应用场景的不同,HTTP 请求的请求体有三种不同的形式
第一种:
移动开发者常见的,请求体是任意类型的,服务器不会解析请求体,请求体的解决需要自己解析,如 POST JSON 的时候就是这类
HTTP请求,形式一
第二种:
第二种和第三种都有固定的格式,是服务器端开发人员最先理解的两种。这里的格式要求就是 URL 中 Query String 的格式要求:多个键值对之间用&连接,键与值之间用=连接,且只能用 ASCII 字符,非 ASCII 字符需使用UrlEncode编码
HTTP 请求,形式二
第三种:
第三种请求体被分成多个部分,文件上传 时会被使用,这种格式最先是被用于邮件传输中,每个字段/文件都被 boundary(Content-Type中指定的)分成单独的段,每段以–加 boundary 开头,而后是该段的形容头,形容头之后空一行接内容,请求结束的标识为 boundary 后面加–
HTTP 请求,形式三
4. HTTP之响应篇
HTTP 响应的格式上除状态行(第一行)与请求报文的请求行不一样之外,其余的就格式而言是一样的,但排除状态行和请求行的区别,从 Header 上还是可以区分出 HTTP 请求和 HTTP 响应的区别的,怎样区别就要看前面的 Header 啦
HTTP响应报文
4.1 响应状态行
状态码
状态码(就是上图中的响应码),假如想查看各种状态码具体的含义,可以看一下这篇文章HTTP状态码对照表,当然这么多状态码要想一律都记住的话,还是比较困难的。
在平常我们只需记住这些就差不多了
状态码 | 对应的信息 |
---|---|
1xx | 提醒信息—表示请求已接收,继续解决 |
2xx | 用于表示请求已被成功接收、了解、接收 |
3xx | 用于表示资源(网页等)被永久转移到其它 URL,也就是所谓的重定向 |
4xx | 用户端错误—请求有语法错误或者者请求无法实现 |
5xx | 服务器端错误—服务器未能实现合法的请求 |
4.2 响应头
响应头同样可用于传递少量附加信息
响应头
常见的响应header
名称 | 作用 |
---|---|
Date | 服务器的日期 |
Last-Modified | 该资源最后的修改时间 |
Transfer-Encoding | 取值一般为 chunked,出现在 Content-Length 不能确定的情况下,表示服务器不知道响应板体的数据大小,一般同时出现Content-Encoding响应头 |
Set-Cookie | 设置 Cookie |
Location | 重定向到另一个 URL,如输入浏览器就输入 baidu.com 回车,会自动跳转到www.baidu.com 就是通过这个响应头控制的 |
Server | 后端服务器 |
4.3 响应体
响应体也就是网页的正文内容,一般在响应头中会用 Content-Length 来明确响应体的长度,便于浏览器接收,对于大数据量的正文信息,也会使用 chunked 的编码方式。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 详解HTTP(HTTP知识总结)