Http协议的详细总结

HTTP协议

超文本传输协议HyperText Transfer Protocol),缩写HTTP。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

URI和URL

  • URI:Uniform Resource Identifier,统一资源标识符
    Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是用URI来定位的;
    URI一般由三部分组成:
  1. 访问资源的命名机制
  2. 存放资源的主机名
  3. 资源自身的名称,由路径表示,着重强调于资源
  • URL:Uniform Resource Location,统一资源定位符
    URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。URL是URI的一种。
    采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
    URL一般由三部组成
  1. 协议
  2. 可访问该资源的主机IP地址(或带有端口号)
  3. 主机资源的具体地址(目录加文件名)

URL的构成:

  1. 协议部分:协议部分为http:
  2. 域名部分:域名部分例如"www.jianshu.com",当然域名也可以用IP地址,IP少一步用DNS服务器解析
  3. 端口部分:域名和端口之间使用":"分隔。端口不是URL必须的部分,如果端口省略,将采用默认端口号80,所以实际请求地址是http://www.jianshu.com:80
    4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
  4. 文件名部分:指在服务器中访问的资源文件的路径。
  5. 锚部分:从“#”开始到最后,都是锚部分,也不是必须的部分。做过html的都知道,用于定位到页面的滑动位置。
  6. 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。例如?page=1。

请求的种类:

HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式。就类似操作数据库和文件系统一样,设计网络的请求也是一样。URL用于定位了网络资源,创造PUT,DELETE,POST,GET来对应增,删,改,查操作。但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接的来实现。

  • GET
    向指定资源发出“显示“信息。使用GET方法只用于获取数据,而不应该改变数据本身,即不对数据进行操作和提交信息。

  • POST
    向指定资源提交数据,请求服务器进行处理(例如提交参数/表单,或者上传文件)。可能会对数据进行操作和提交信心,创建资源。

  • PUT
    向指定资源位置上传其最新内容。

  • DELETE
    顾名思义,请求服务器删除URI所对应的资源。

  • HEAD
    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

  • TRACE
    回显服务器收到的请求,主要用于测试或诊断。

  • OPTIONS
    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

  • CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

GET和POST的区别:

  1. 参数携带位置不同。
    GET提交的数据会附加家URL之后(即把数据放在请求行中),会在地址栏中显示,接?=传值,多个参数用&连接。POST提交的数据放在HTTP包体中,地址栏不显示。

  2. 传输数据大小限制不同。
    不同浏览器对URL的长度有限制,因此对于GET提交时,传输数据就会受到URL长度的限制。POST由于不是通过URL传值,理论上数据不受限。

  3. POST的安全性要比GET的安全性高。因为浏览器可能对请求地址做历史记录的存储,对于GET请求的登录,那其他人就可以直接在URL上拿到你的账号和密码了,而POST拿不到参数。

HTTP请求信息:

客户端发送一个HTTP请求到服务的请求信息包括以下格式:
请求行(request line)、请求头(header,常用于存放token)、空行和请求数据四个部分。

image.png

例如:

GET /8669504-c2641e8e6eed5904.png HTTP/1.1
Host www.jianshu.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/,/*;q=0.8
Referer www.jianshu.com
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
name=Professional%20Ajax&publisher=lili

  1. 第一行请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。
  2. 第二部分,大括号之间的请求头部,用于提交服务器的附加信息。
  3. 第三部分,空行,请求头部后面的空行是必须的。
  4. 第四部分,请求数据也叫主体,可以添加任意的其他数据。

HTTP响应信息:

服务器接受请求回传响应信息也由四分部组成:
状态行,消息报头,空行和响应正文。
例如:

HTTP/1.1 200 OK
Date: Fri, 22 May 2017 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
</body>
</html>

  1. 第一行包括协议版本号,返回状态码
  2. 第二行为响应日期时间
  3. 第三行为响应消息报头,Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
  4. 响应正文,服务器返回给客户端的文本信息。

HTTP状态码:

状态码有三位数字,第一数字表示当前相应的类型,各个类型有:

  • 1xx消息——请求已被服务器接受,继续处理
  • 2xx成功——请求已成功被服务器接收(如见到就像亲人的200,201)
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——客户端错误:请求含有词法错误或无法被执行(如见到就想暴走的404 Not Found)
  • 5xx服务器错误——服务端错误:服务器在处理某个正确请求时发生错误(如一见到就想找后台的500)

常见的状态码如下:
200 OK:客户端请求成功
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务
500 Internal Server Error:服务器发生不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

总结HTTP一次请求的完整过程:

image.png
  1. 客户端与服务端建立TCP连接
  2. 通过TCP套接字连接,发送HTTP请求
  3. 服务器解析请求,定位请求资源,将查询资源然后返回HTML文本数据,由客户端读取。
  4. 释放TCP连接
    5.客户端浏览器解析HTML内容
浏览器输入网站发生的事件:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;

Http各版本特性有哪些:

HTTP 1.0

特点:
1.引入请求头和响应头(数据类型、语言版本、编码类型、用户代理);
2.数据压缩;
3.引入状态码;
4.提供了Cache缓存机制(head里的缓存头:If-Modified-Since、Expires)。

瓶颈:
仅支持短连接,对于包含多个请求的文件,会大大增加开销;
串行文件传输,一个请求没有及时返回,会引起队头阻塞;
一个服务器仅支持一个域名;
因为在响应头中需要指定数据大小,因此无法接收动态生成的数据;
服务器只能传递完整的数据,而不能满足“只想要数据的一部分”这样的需求,会导致带宽浪费;
不支持断点续传。
每次数据传输,在TCP建立连接时,三次握手都会有1.5个RTT(round-trip time)的延迟。

HTTP 1.1

特点:
1.支持持久连接,一次连接可以发送多个请求和响应(最多6个)
2.引入虚拟主机技术,让一个服务器可以支持多个域名;
3.引入Cookie与安全机制;
4.引入range头域,可以只请求资源的一部分(状态码206);
5.优化缓存策略(在head中,增加Etag、If-Unmodified-Since、If-Match、If-None-Match等缓存头);
6.增加错误状态码。

HTTP 2.0

1.使用多路复用技术,一个连接可以发送多个请求;
2.可以设置请求优先级;
3.借助专门为首部压缩设计的HPACK 算法进行首部压缩。

HTTP2.0多路复用有多好?
HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。
HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。

HTTP 3.0

特点:
1.基于UDP
2.实现了多路复用;
3.实现了流量控制、可靠传输;
4.实现了快速握手。

瓶颈:
兼容性尚不完整;
优化程度不高。

参考:
https://blog.csdn.net/qq_44647809/article/details/120570572
https://zhuanlan.zhihu.com/p/342311013

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • (原话)谈谈对HTTP协议的理解:超文本传输协议,应用于OSI网络模型中的应用层,是用于服务器传输超文本到本地浏览...
    24_yu阅读 874评论 0 1
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,326评论 6 152
  • HTTP概述 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最...
    曹渊说创业阅读 3,838评论 2 61
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82