HTTP协议

一、什么是http协议?

1.1 超文本传输协议(HTTP,HyperText Transfer Protocol),是用于从www(WWW:World Wide Web)服务器传输超文本到本地浏览器的传输协议。

二.版本和特点

2.1 版本
2.2 特点

三、http协议具体内容

3.1 http协议格式

3.1.1 url格式

https://user:passwd@blog.guanshizhai.online:80/gongzuo/zhuanyezhishi/caozuoxitong/centos7directory?v=1#boot

协议方案名://用户名:密码@服务器地址:服务器端口号//资源路径?参数#片段标识符

3.1.2 报文格式

3.1.2.1 什么是http协议报文?

用于http协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。

3.1.2.2 报文结构

HTTP报文可以分文报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。报文主体可以没有。

报文首部    服务器端或客户端需处理的请求或响应的内容及属性
空行(CR+LF)    CR(Carriage Return,回车符:16进制 0x0d)LF(Line Feed,换行符:16进制 0x0a)
报文主体    应被发送的数据

请求报文结构

    请求行
    请求首部字段
报文首部    通用首部字段
    实体首部字段
    其他
空行(CR+LF)    空行(CR+LF)
报文主体    报文主体

响应报文结构

    响应行
    响应首部字段
报文首部    通用首部字段
    实体首部字段
    其他
空行(CR+LF)    空行(CR+LF)
报文主体    报文主体

3.2 http协议的状态码

1xx:指示信息–表示请求已接收,继续处理

101状态码,服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP 版本比旧版本更有优势,或者切换到一个实时且同步的协议以传送利用此类特性的资源。

2xx,用于表示请求成功。

200状态码的意思是一切正常。一般用于响应GET和POST请求。
206状态码,局部内容,是在服务器完成了一个包含Range头信息的局部请求时被发送的。这是 HTTP 1.1中新加入的。

3xx,用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

301状态码请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一
302状态码请求的资源临时从不同的 URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
304 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

4xx,用于指出客户端的错误

400状态码
  1.语法错误,当前请求无法被服务器理解。
  2.请求参数有误。
403 状态码,访问被拒绝
404 状态码,资源不存在
499 状态码,客户端关闭连接

5xx,用于指出服务器错误

502状态码,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接受到的无效响应。
503状态码,由于临时的服务器维护或者过载,服务器当前无法处理请求。
504状态码,作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器(DNS)收到响应。

3.3 http协议的方法

GET – 从指定的资源请求数据
POST – 方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。
HEAD – 获取资源的http头信息
PUT – 上传资源到服务器
DELETE – 删除资源
TRACE – 请求服务器回送收到的请求信息,主要用于测试或诊断

GET和POST对比

3.4 http协议的头部内容

3.4.1 通用首部字段

请求报文和响应报文两方都会使用的首部

首部字段名    说明字段值(未整理)
Cache-Control    控制缓存的行为(未整理)
Connection    逐跳首部、连接的管理(未整理)
Date    创建报文的日期时间(未整理)
Pragma    报文指令(未整理)
Trailer    报文末端的首部一览(未整理)
Transfer-Encoding    指定报文主题的传输编码方式(未整理)
Upgrade    升级为其他协议(未整理)
via    代理服务器的相关信息(未整理)
Warning    错误通知(未整理)

3.4.2 请求首部字段

从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

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

3.4.3 响应首部字段

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

首部字段名    说明字段值(未整理)
Accept-Ranges    是否接受字节范围请求 (未整理)
Age    推算资源创建经过时间 (未整理)
ETag    资源的匹配信息 (未整理)
Location    令客户端重定向至指定URL (未整理)
Proxy-Authenticate    代理服务器对客户端的认证信息 (未整理)
Retry-After    对再次发起请求的时机要求 (未整理)
Server    HTTP服务器的安装信息 (未整理)
Vary    代理服务器缓存的管理信息 (未整理)
WWW-Authenticate    服务器对客户端的认证信息 (未整理)

3.4.4 实体首部字段

针对请求请求报文和响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

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

3.4.5 非HTTP/1.1 首部字段

在HTTP协议通信交互中使用到的首部字段,不限于RFC2616中的定义的47中首部字段。还有Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段,它们的使用频率也很好。
这些非正式的首部字段统一归纳在RFC4339 HTTP Header Field Registrations中。
RFC链接地址:
http://www.rfc-editor.org/info/rfc4229

3.4.6 End-to-end首部和Hop-by-hop首部

HTTP首部字段将定义成缓存代理和非缓存代理的行为,分为2种类型。

端到端首部(End-to-end Header)

分在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。

逐跳首部(Hop-by-hop Header)

分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后版本中,如果要使用hop-by-hop首部,需提供Connection首部字段。

下面列举了HTTP/1.1中的逐跳首部字段。除这8个首部字段之外,其他所有字段都属于端到端首部。

Connection
Keep-Alive
proxy-Authenticate
Proxy-Authorization
Trailer
TE
Transfer-Encoding
Upgrade

3.5 http协议的安全

3.5.1 什么是https?

https是对http进行了安全加密的协议。它通过对HTTP通信接口用SSL和TLS协议代替。通常HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。

3.5.2 为什么要用https?

因为http协议是明文传输,可能会遭到窃听、篡改、伪装。所以需要使用https来保证数据传输中的安全。

3.5.3 加密算法?

对称加密
非对称加密

3.5.4 https的具体实现?

HTTPS实现原理

3.5.5 ssl和tls协议介绍

SSL与TLS的区别以及介绍

3.6 依赖协议

TCP/IP

书籍推荐

《图解TCP协议》—— 适合初入门。
《TCP/IP详解》—— 经典教程

DNS协议

《DNS与BIND》

四、http缓存

http缓存

五、http协议相关联的一些内容

4.1 web服务器

常见的web服务器,Nginx、Apache、Tomcat
参考博文

4.2 构建web内容的计算机

4.2.1 html

什么是html
HTML 指的是超文本标记语言 (Hyper Text Markup Language)
HTML 不是一种编程语言,而是一种标记语言 (markup language)
标记语言是一套标记标签 (markup tag)
HTML 使用标记标签来描述网页

4.2.2 css

什么是CSS
CSS是网页的样式,主要分为三种,外部样式、内部样式、和嵌套样式
css样式说明
css教程

4.2.3 js

什么是js
JavaScript 是世界上最流行的脚本语言。
JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页面增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的 JavaScript 片段添加到网页中。
js说明与相关课程
js教程

4.2.4 web应用

参看4.1相关

4.2.5 CGI/servlet

CGI(公共网关接口)
servlet

4.2.6 xml

XML 指可扩展标记语言
XML 被设计用来传输和存储数据。
xml说明与教程

4.2.7 json

json说明
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
json教程

五、基于http的功能追加的协议

5.1 websocket说明

六、http相关的资料

6.1 官方相关

http官方RFC文档

rfc4229

6.2 书籍推荐

《HTTP协议权威指南》

《图解HTTP协议》

《图解TCP协议》

《DNS与BIND》

6.3 参考博文

GET和POST对比

http缓存

SSL与TLS的区别以及介绍

常见web服务器

HTML 请求方法

HTTP百度百科

关于HTTP协议,一篇就够了

HTTP协议详解(真的很经典)


Previous Post

网络分析命令-tupdump

Next Post

LVM简介

Related Posts