我是靠谱客的博主 舒心小蝴蝶,最近开发中收集的这篇文章主要介绍老生常谈——HTTP,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

HTTP 和 TCP 的关系

HTTP 是在 TCP 传输协议上层的应用层协议,主要解决如何包装数据的问题,关于 TCP/IP 和 HTTP 协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP 协议,但是如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如 HTTP、FTP、TELNET 等,也可以自己定义应用层协议,Web 使用 HTTP 协议作应用层协议,以封装 HTTP 文本信息,然后使用 TCP/IP 做传输层协议将它发到网络上”。

HTTP 协议和 TCP 协议

1、HTTP 访问到服务器的过程

从在浏览器中输入一个网址直到请求到达服务器的过程中如下图。



2、长连接

在 HTTP1.0 版本中,每一个请求都需要在 TCP 协议中经历 “三次握手四次挥手”,在 HTTP1.1 中有了长连接,这个问题得到了改善,可以通过创建的一次 TCP 连接,进行多次请求响应,并在结束后关闭 TCP 连接。

HTTP1.0 版本:



HTTP1.1 长连接版本:



3、管线化

在不同的浏览器中对于访问同一个域名,都有一个最大的请求数限制,数量大小因浏览器而异,如果请求数量大于最大请求数限制,则需要排队等待其他请求结束。

管线化技术,在超出最大请求数限制,客户端继续发送请求到服务端,而不需要其他请求得到响应的时候才能进行,实现并行发送请求,CDN 是比较典型的解决方式,将静态资源分发到不同 ip 下的服务器,请求资源是通过不同的代理服务器去同时获取,可以提高页面初始化响应的速度。



4、URI 和 URL

URI:是统一资源标识符,在某个规则下能把这个资源独一无二标示出来,类似人的身份证号;
URL:统一资源定位符,表示资源的地点,URL 是使用浏览器访问 Web 页面时需要输入的网页地址。

URL 的组成:

username:password@www.pandashen.com:80/2018/07/09/…

  • http:协议类型;
  • username:password:登录信息(如 Github,不安全);
  • www.pandashen.com:服务器地址(与前面用 @ 连接);
  • 80:服务器端口号(与前面用 : 连接);
  • /2018/07/09/index.html:带层次的文件路径;
  • uid=1&name=panda:查询字符串(与前面用 ? 连接);
  • ch1:片段标识符(hash 值,与前面使用 # 连接)。

HTTP 的组成

请求的一方叫客户端,响应的一方叫服务器端,通过请求和响应达成通信,HTTP 是一种无状态的协议。

1、请求报文

请求报文包含请求行、请求首部和请求体三个部分。



请求行由三个部分组成,并写在同一行,分别为请求方法、请求路径(域名和端口号后面的部分)和协议/版本号。

请求方法:

  • GET:获取资源
  • POST:向服务器端发送数据,传输实体主体
  • PUT:传输文件
  • HEAD:获取报文首部
  • DELETE:删除文件
  • OPTIONS:询问支持的方法
  • TRACE:追踪路径

追踪路径方式如下图:



请求体内的内容为向服务端发送的数据,首部分为通用首部、请求首部、响应首部和实体首部四种,在后面详细说明。

2、响应报文

响应报文同样包含三个部分,响应行、响应首部和响应体。



响应行由三个部分组成,并写在同一行,分别为协议/版本号、状态码和状态码原因短语。

注意:在请求首部与请求体之间、在响应首部与响应体之间都应该空一个空行。

HTTP 响应状态码

状态码负责表示客户端请求的返回结果、标记服务器端是否正常、通知出现的错误。

1、状态码类别

类别原因短语
1XXInformational(信息性状态码)
2XXSuccess(成功状态码)
3XXRedirection(重定向)
4XXClient Error(客户端错误状态码)
5XXServer Error(服务器错误状态吗)

2、常见状态码

(1) 成功

状态码原因短语原因解释
200OK客户端发过来的数据被正常处理
204Not Content正常响应,没有实体
206Partial Content范围请求,返回部分数据,响应报文中由 Content-Range 指定实体内容

(2) 重定向

状态码原因短语原因解释
301Moved Permanently永久重定向
302Found临时重定向,规范要求方法名不变,但是都会改变成 GET
303See Other和 302 类似,但必须用 GET 方法
304Not Modified状态未改变,配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
307Temporary Redirect临时重定向,不该改变请求方法

(3) 客户端错误

状态码原因短语原因解释
400Bad Request请求报文语法错误
401Unauthorized需要认证
403Forbidden服务器拒绝访问对应的资源
404Not Found服务器上无法找到资源

(4) 服务器错误

状态码原因短语原因解释
500Internal Server Error服务器故障
503Service Unavailable服务器处于超负载或正在停机维护

HTTP 首部

HTTP 首部字段是 HTTP 报文首部的重要部分,在客户端和服务器进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。

HTTP 首部主要分为通用首部、请求首部、响应首部和实体首部四种:

  • 通用首部字段:请求和响应报文两方都会使用的首部字段;
  • 请求首部字段:从客户端向服务器发送请求报文时使用的首部字段,补充了请求的附加内容,客户端信息,响应内容相关优先级等信息;
  • 响应首部字段:从服务器向客户端返回响应报文时使用的首部字段;补充了响应的附加内容,也会要求客户端附加额外的内容信息;
  • 实体首部字段:针对请求报文和响应报文的实体部分使用的首部,补充了资源内容的更新时间等与实体有关的信息。

1、通用首部字段

首部字段名说明
Cache-Control控制缓存行为
Connection链接的管理
Date报文日期
Pragma报文指令
Trailer报文尾部的首部
Trasfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器信息
Warning错误通知

2、请求首部字段

首部字段名说明
Accept用户代理可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的编码
Accept-Langulage优先的语言
AuthorizationWeb 认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在的服务器
If-Match比较实体标记
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记
If-Range资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since比较资源的更新时间( 与 If-Modified-Since相反 )
Max-Forwards最大传输跳数
Proxy-Authorization代理服务器需要客户端认证
Range实体字节范围请求
Referer请求中的URI的原始获取方
TE传输编码的优先级
User-AgentHTTP 客户端程序的信息

3、响应首部字段

首部字段名说明
Accept-Ranges是否接受字节范围
Age资源的创建时间
ETag资源的匹配信息
Location客户端重定向至指定的 URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After再次发送请求的时机
Server服务器的信息
Vary代理服务器缓存的管理信息
www-Authenticate服务器对客户端的认证

4、实体首部字段

首部字段名说明
Allow资源可支持的 HTTP 方法
Content-Encoding实体的编码方式
Content-Language实体的自然语言
Content-Length实体的内容大小(字节为单位)
Content-Location替代对应资源的 URI
Content-MD5实体的报文摘要
Content-Range实体的位置范围
Content-Type实体主体的媒体类型
Expires实体过期时间
Last-Modified资源的最后修改时间

总结

本篇重点介绍关于 HTTP 协议的一点基础知识,关于请求、响应以及报文对应的信息及内容,也可以用作查询使用。


原文出自:https://www.pandashen.com


最后

以上就是舒心小蝴蝶为你收集整理的老生常谈——HTTP的全部内容,希望文章能够帮你解决老生常谈——HTTP所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部