加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

http协议从入门到再入门

发布时间:2020-12-15 00:41:16 所属栏目:C语言 来源:网络整理
导读:第一章 web及网络基础 http 概念 HyperText Transfer Protocol 通常被称为超文本传输协议,但这种译法并不严谨,应该为 “超文本转移协议” 。 计算机网络的 五层协议模型 物理层(硬件,在物理线路上传输原始的二进制数据); 数据链路层(硬件,在通信的实
状态码一共有六十余种,但是常用的大概有14种。 状态码 301,302标准禁止将POST方法改变成GET方法,但实际上浏览器都没有遵守 该状态码表示客户端发起了带有附加条件请求时(如If-Modified-Since If-None-Match If-Range等),被请求的资源未发生变化时,返回304 它其实和重定向没有关系 HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。报文分为报文首部和报文主体(不是必须的)两部分,之间用空行隔开。如下图所示:
请求报文和响应报文上图中请求行和相应行内容很简单,不是研究重点,四种首部字段(通用首部字段、请求首部字段、响应首部字段、实体首部字段)才是重点所在。

请求/响应行

请求行:  包含用于请求的方法,请求URI 和 HTTP版本,如`GET  /  HTTP/1.1`
响应行:  包含表明响应结果的状态码,原因短语和HTTP版本,如`HTTP/1.1  200 OK`

通用首部字段

通用首部字段指的是请求和响应都会使用到的首部字段

1 Cache-Control: 缓存控制

控制台查看(chrome中),并不位于通用首部中。
在客户端和元服务器之间存在一个缓存服务器。
客户端常用的值有:
`Cache-Control:max-age=0` `Cache-Control:no-cache`表示客户端不会接受缓存过的响应`注意此处并非不缓存,而是不缓存过期的资源,缓存会向源服务器确认有效期`,必须把客户端请求转发给源服务器。

2 Connection

Connection: Keep-alive
保存长连接。当服务器想明确断开连接时,则指定Connection首部字段的值为Close。

3 Date

报文创建的日期和时间。(chrome也没。)

请求首部字段

1 Accept

通知服务器,客户端能够处理的媒体类型
  • 文本文件 text/html,text/css,text/plain

  • 图片文件 image/jpeg,image/gif,image/png

  • 视频文件 video/mpeg

  • 二进制文件 application/ocet-stream,application/zip
    后面可能会追加个参数 q=0.8 表示权重(不指定默认为1)

2 Accept-Encoding

告知服务器 客户端支持的内容编码及优先级

3 Accept-Language:zh-CN,zh;q=0.8,en;q=0.6

告知服务器 客户端能处理的自然语言集以及相对优先级

4 Authorization

Authorization: Basic dsdjglWDWQD23sssWQ==
高值服务器 客户端的认证信息(通常出现在401返回码之后的请求中)

5 Host

这是HTTP/1.1唯一要求的必须出现在请求首部中的字段
如果相同的IP地址下部署运行着多个域名,那么服务器会无法理解究竟是哪个域名对应的请求,
因此客户端需使用Host来明确指出请求的主机名。若服务器为设定主机名,则直接发送个空值即可。

6 If-Match

形如If-xxx格式的请求,都成为条件请求,服务器只在条件为真时才会执行请求。
服务器会对比If-Match的字段值和请求的资源在服务器中的ETag值,若一致,才返回(好奇怪的规则)

7 If-Modified-Since

如:要请求的资源在昨天三点以后被修改了,那么就再给我一次,否则不用再给我一次该资源。

8 Referer(正确的写法应该是Referrer)

告知服务器请求的uri

6 Cookie

告知服务器,客户端的cookie有哪些  

响应首部字段

1 Accept-Ranges

Accept-Ranges: bytes 能处理范围请求
Accept-Ranges:none 不能处理范围请求
找到的例子是在图片请求中

2 Age

服务器多久前创建了响应
查看到的几个都是`Age:1`

3 ETag

告知客户端该资源的标识。服务器会为每份资源分配对应的ETag,一旦资源改变,ETag也改变。

4 Location

出现在返回码为30x的响应中,告诉客户端去哪儿。

5 Server

服务器安装的HTTP应用程序信息

6 Set-Cookie

告知客户端种下cookie    

实体首部字段

Nothing

HTTPS

HTTP+加密+认证+完整性保护=HTTPS
HTTPS并非一种新协议,只是HTTP通信接口部分采用SSL、TLS协议代替而已。
HTTP/HTTPSHTTPS通信步骤远比HTTP麻烦,且需要购买证书
HTTPS存在的问题:

  1. 通信速度变慢,网络负载变慢2-100倍

  2. 加密和解密运算导致更多地消耗服务器和客户端的硬件资源,占用过多服务器资源,意味着服务器处理并发能力被削弱

  3. 收费
    因此,目前的状况是:非敏感信息使用HTTP通信,敏感数据采用HTTPS通信

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

第一章 web及网络基础

http概念

HyperText Transfer Protocol 通常被称为超文本传输协议,但这种译法并不严谨,应该为“超文本转移协议”

计算机网络的五层协议模型

  1. 物理层(硬件,在物理线路上传输原始的二进制数据);

  2. 数据链路层(硬件,在通信的实体间建立数据链路连接);

  3. 网络层(软件,主要负责创建逻辑链路或者叫传输路径,代表:IP);

  4. 传输层(软件,负责向用户提供两台计算机之间的数据传输,实现流量控制以及差错控制,代表:传输控制协议TCP和用户数据报协议UDP);

  5. 应用层(软件,为应用程序提供了网络服务,代表:FTP,HTTP,DNS,SMTP,TELNET)。

数据流向

发送端的数据从应用层往物理层流动,接收端的数据是从物理层流向应用层

到底谁请求了ip?

DNS虽然会获取到域名对应的ip,但是它将此ip发送给了客户端,由客户端自己去向这个ip发送请求

URI和URL的概念及区别

URL(统一资源定位符)是URI(统一资源标识符)的子集。URI是对某个资源的标识,由此来确定其唯一性,而URL是通过位置(路径)的方式锁定了某个资源,也达到了具备唯一性的目的,但是描述唯一一个资源,并不一定非要使用URL的方式,举个例子:tel:+1-816-555-1212或者urn:isbn:0-486-27557-4,这都是uri但不是url。

第二章 http最基础知识

http是一种无状态协议,意思就是

>你之前给我发送了啥来着?
我想想啊...额,不记得了...
>额,那我再问一次...

协议本身并不保留之前的一切请求或响应报文的信息, 之所以这样设计,是为了让服务器能够处理大量事务、减少内存消耗,确保协议的可伸缩性。但为了实现状态保持,后来就诞生了cookie技术

  • http的方法

    • GET 获取资源

    • POST 传输实体主体

    • PUT 传输文件

    • DELETE 删除文件

    • HEAD 它和get一样,但是不返回报文主体,只用于确认uri的有效性和资源更新的日期时间

    • TRACE 追踪路径 它可以查询发送出去的请求是怎样被加工修改的,用来确认连接过程中发生的一系列操作,但是很不常用

    • CONNECT 要求使用隧道协议连接代理,主要使用SSL(Secure Sockets Layer安全套接字层)和TLS(Transport Layer Security传输层安全)把通信内容加密后经网路隧道传输

短连接、持久连接与管线化

第一阶段:短连接

http协议的初始版本中,是采用的`短连接`方式,即每进行一次http通信,就要经过三次握手、http请求、http响应、四次挥手这四个过程,对于当年的业务还好,毕竟都是传输些小文本,但如今文档中包含的大量图片,样式文件,脚本文件等,再继续采用这种方式,显然不可取(因为每次都要花费http连接和断开的时间)。

第二阶段:诞生了持久连接(即长连接)

它实现了**三次握手、http请求-http响应、http请求-http响应 ...(请求到了所有资源) 四次挥手**   这一过程,省去了http建立连接和断开连接的时间,其最大特点就是**只要任意一端没有明确提出断开连接,连接将一直保持** http1.1种所有的连接默认都是持久连接

第三阶段: 管线化的诞生

它是在持久连接的基础上,打破了`只有收到上次请求的响应后才能发送下一个请求`的限制,
实现了客户端可以不断地发送请求,而`不必在意之前发送的请求的响应是否到来`。
这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。
比如当请求一个包含10个图片的html页面时,与短连接相比,用持久连接可以让请求更快结束,
而管线化技术则比持久连接还要快。请求越凶猛,时差就越明显。

一图胜千言:
http连接三个阶段

第三章 HTTP状态码

首先需要明确的是:不少返回的状态码与真实状态并不对应,比如web应用程序发生了错误,但仍返回200

五类状态码

状态码
    推荐文章
      热点阅读