理解 HTTP

封面图片来自Google

概述

Http

超文本传输协议 HypeText Transfer Protocol

  • 是一种用于分布式、协作式和超媒体传输的应用层协议
  • HTTP是万维网的数据通信基础

http是客户端与服务器做出请求响应的标准(基于TCP)。

通常,由HTTP客户端发起一个请求,继而创建一个到服务器指定端口(默认80)的TCP连接。 HTTP服务器则在该端口上监听客户端的请求,一旦受到请求,就会向客户端返回一些响应,一般包含协议版本、HTTP状态码以及返回的内容

此外,在客户端和服务器中间还可能存在多个中间层,比如代理服务器、网关或者隧道等。

协议版本
  • 1999.6 HTTP/1.1
  • 2015.5 HTTP/2
  • 2018 提出HTTP/3
    基于QUIC,标准制定中..
HTTP消息结构概述
  • 客户端请求
    • 请求行
    • 请求头
    • 空行
    • 请求主体 body
Example
GET /hello.text HTTP/1.1  //请求行
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi   //请求头部
//空行
//请求数据
复制代码
  • 服务器响应
    • 状态行
    • 响应头
    • 空行
    • 响应正文 body
HTTP/1.1 200 OK         //状态行
Date: Mon, 27 Jul 2009 12:28:53 GMT  //消息报文
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
//空行
//响应正文
复制代码

接下来会对一些常见的知识点进行展开

  • 客户端请求
    • HTTP协议8种请求类型
  • 服务端响应
    • 常见状态码
  • 常见头字段
    • 通用头
    • 请求头
    • 响应头
    • 实体头
  • 代理 (Proxieds
  • HTTPS
    • TLS加密
    • SSL加密
  • HTTP2/HTTP3

进一步

HTTP8种请求类型

HTTP/1.1协议种定义了8种方法,以不同的方式操作指定资源:

  • GET

读取资源,不产生副作用

  • HEAD

GET类似,区别在于不会包含响应正文

  • POST

请求包含请求正文

  • PUT

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

  • TRACE

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

  • OPTIONS

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

  • CONNECT

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

常见响应状态码

1XX 消息

这一类状态码代表请求已经被接受,需要继续处理。这类响应是临时响应。
HTTP/1.0协议中没有定义1XX状态码,所以一般服务器禁止发送1XX响应码

2XX 成功

表示请求已成功被服务器接受、理解,并接受

  • 200 OK 表示从客户端发来的请求在服务端被正确处理

  • 204 No Content 服务器成功处理了请求,没有返回任何内容 (不含响应正文)

  • 205 Reset Content 表示请求成功,没有返回响应正文,与204的区别在于要求请求方重置内容

  • 206 Partial Content 客户端进行指定内容范围的请求(断点下载)

3XX 重定向

这类状态码百事需要客户端采取进一步的操作才能完成请求。通常用来重定向后续请求地址在响应的location域中指明。

  • 301 Moved Permanatly 永久重定向,表示资源已经被分配了新的URL

  • 302 Found 临时重定向,表示资源临时被分配了新的URL

  • 303 See Other 表示资源存在另一个URL,应使用GET方法获取资源

  • 304 Not Modified 表示请求的资源与之前请求头中参数指定的版本相比,没有做修改。 在这种情况下,由于客户端任具有之前下载的副本,因此不需要重新传输资源

  • 307 Temporary Redirect 临时重定向,与302类似。区别在于后续请求仍使用原始的URL

4XX 客户端错误

  • 400 Bad Request 明显的客户端错误:请求报文语法错误、请求超过限制大小、无效的请求或欺骗性路由请求
  • 401 Unauthorized 没有认证的请求,表示当前请求需要用户验证。 请求需要包含一个正确的Authorization证书头信息。 另外,有的网站禁止从特定的IP地址发送的请求,也是返回401。
  • 403 Forbidden 表示对请求资源的访问被服务器拒绝
  • 404 Not Found 请求失败,表示在服务器上没有找到请求的资源。 广泛适用于当服务器不想解释为何请求被拒绝或有无其他可用响应的适合。 (被强行拒绝,没有为什么)

5XX 服务端错误

  • 500 Internal Server Error 表示服务器端执行请求时候发生了错误
  • 501 Not Implemented 表示服务器不支持当前请求所需要的某个功能
  • 503 Service Unavailable 表示临时的服务器停机维护或者过载,会在一段时间以后恢复。

HTTP Headers

HTTP Headers头字段是客户端和服务器进行请求和响应时候传递的额外信息。根据头字段作用大致分组AuthenticationCachingClient hintsConditionalConnention ManagementContent negontiationControlsCookiesCORSDo not trackDownloadsMessage Body InformationProxiesRedirectsRequest ContextRespose ContextRange RequestSecurityServer-sent eventTransfering CodeWebsocketOther 参考 | MDN

HTTPS

HTTPS 还是通过了 HTTP 来传输信息,只不过信息通过 TLS或者SSL 协议进行了加密。 图解TSL/SSL | 阮一峰

参考:

水平有限,可能会有许多不准确的地方,欢迎指正!

转载于:https://juejin.im/post/5c650256e51d4501387b5578

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值