HTTP解析

4 篇文章 0 订阅

在这里插入图片描述

首先说下计算机通信原理

互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议:

TCP:Transmission Control Protocol传输控制协议
IP:Internet Protocol网际协议

引自维基百科TCP/IP协议族是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。这个协议族由互联网工程任务组负责维护。

TCP:应用程序之间的通信

TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变。TCP在IP地址上引端口(port),它允许计算机通过网络提供各种服务。一些端口号未不同的服务保留,而且这些端口号是众所周知。

服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流。例如大多数邮件通信流出现在端口25上,用于www的HTTP通信流出现在80端口上。

当应用程序希望TCP与另外一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信,占用两个计算机之间整个的通信线路。TCP用于从应用程序到网络的数据传输控制。TCP负责在数据传送之前将它们分割为IP包,然后在它们到达的时候将它们重组。

TCP/IP就是TCP和IP两个协议在一起协同工作,有上下层次的关系。

TCP负责应用软件(比如你的浏览器)和网络软件之间的通信。IP负责计算机之间的通信。TCP负责将数据分割并装入IP包,IP负责将包发送至接受者,传输过程要经IP路由器负责根据通信量、网络中的错误或者其他参数来进行正确的寻址,然后在它们到达的时候重新组合它们。

IP:计算机之间的通信
IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP用来在Internet上标识这台计算机。IP负责在因特网上发送和接收数据包。通过IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP负责将每个包路由至它的目的地。

IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP。

HTTP

(注:以下HTTP的介绍来源
作者:Keely
链接:https://juejin.im/post/5ad4465d6fb9a028da7d0117)

HTTP概念以及介绍
1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的www文件都必须遵守这个标准。
2.HTTP是基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)
3.HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图:在这里插入图片描述 4.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
5.HTTP默认的端口号为80,HTTPS的默认端口号为443.

2.HTTP协议工作流程

一次HTTP操作成为一个事务,其工作过程大概如下:

1.用户在浏览器中键入需要访问的网页URL或者点击某个网页中链接;
2.浏览器根据URL中的域名,通过DNS解析出目标网页的IP地址;

浏览器请求这个页面:http://hackr.ip/index.html
在这一步,需要域名系统DNS解析域名hackr.ip,得主机的IP地址 20X.189.105.112。
然后将上面结合本机自己的信息,封装成一个http请求数据包

3.在HTTP开始工作前,客户端首先会通过TCP/IP协议来和服务端建立链接(TCP三次握手)
4.建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和内容
5.服务器接收到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、试题信息和可能的内容。
6.一般情况下,一旦web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connect:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
在这里插入图片描述在这里插入图片描述2.1 短连接
短连接的操作步骤是:建立连接-数据传输-关闭连接…建立连接-数据传输-关闭连接

如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。

在这里插入图片描述2.2 长链接
长链接是指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包

长链接操作步骤:
建立连接——数据传输…(保持连接)…数据传输——关闭连接
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间
长链接分为 without pipelining 和 with pipelining,下图中是without pipelining,客户端只在收到前一个请求的响应后,才发出新的请求。

在这里插入图片描述2.3 管线化

下图是with pipelining,每次建立链接后无需等待请求回来就可以发送下一个请求
在这里插入图片描述3. Http请求报文
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行(request line)、请求头部(header)、请求体组成,下图给出了请求报文的一般格式。
在这里插入图片描述

请求行:
    方法:
        GET 获取资源
        POST 向服务器端发送数据,传输实体主体
        PUT 传输文件
        HEAD 获取报文首部
        DELETE 删除文件
        OPTIONS 询问支持的方法
        TRACE 追踪路径
    协议/版本号
    URL
    
请求头:
    通用首部(General Header)
    请求首部(Request Header)
    响应首部(Response Header)
    实体首部(Entity Header Fields)
    
请求体

请求报文拆解:
在这里插入图片描述3.1 get请求
在这里插入图片描述3.2 post请求
在这里插入图片描述4. Http响应报文
HTTP响应组成:响应行、响应头、响应体。
在这里插入图片描述

响应行
    (HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
响应头
    Date:生成响应的日期和时间;
    Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
响应体

响应报文拆解:

在这里插入图片描述 Http状态码

类别原因
1XXInformational(信息性状态码)
2xxSuccess(成功状态码)
3xxRedirection(重定向)
4xxClient Error(客户端错误状态码)
5xxServer Error(服务器错误状态吗)

5.1 2XX 成功

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

5.2 3XX 重定向

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

5.3 4XX 客户端错误

400(Bad Request) 请求报文语法错误
401 (unauthorized) 需要认证
403(Forbidden) 服务器拒绝访问对应的资源
404(Not Found) 服务器上无法找到资源

5.4 5XX 服务器端错误

500(Internal Server Error)服务器故障
503(Service Unavailable) 服务器处于超负载或正在停机维护

6. 首部

6.1 通用首部字段

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

6.2 请求首部字段

首部字段名 说明

    Accept
    用户代理可处理的媒体类型


    Accept-Charset
    优先的字符集


    Accept-Encoding
    优先的编码


    Accept-Langulage
    优先的语言


    Authorization
    Web认证信息


    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-Agent
    HTTP客户端程序的信息

6.3 响应首部字段

首部字段名 说明

    Accept-Ranges
    是否接受字节范围


    Age
    资源的创建时间


    ETag
    资源的匹配信息


    Location
    客户端重定向至指定的URI


    Proxy-Authenticate	
    代理服务器对客户端的认证信息


    Retry-After
    再次发送请求的时机


    Server
    服务器的信息


    Vary
    代理服务器缓存的管理信息


    www-Authenticate
    服务器对客户端的认证

6.4 实体首部字段

首部字段名
说明

    Allow
    资源可支持的HTTP方法


    Content-Encoding
    实体的编码方式


    Content-Language
    实体的自然语言


    Content-Length
    实体的内容大小(字节为单位)


    Content-Location
    替代对应资源的URI


    Content-MD5
    实体的报文摘要


    Content-Range
    实体的位置范围


    Content-Type
    实体主体的媒体类型


    Expires
    实体过期时间


    Last-Modified
    资源的最后修改时间
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值