HTTP 详解

HTTP超文本传输协议,被设计用于Web浏览器和Web服务器之间的通信,请求响应的模型:客户端主动请求服务器,服务器响应客户端。

工作流程
a)首先客户端与服务器需要建立连接。单击某个超级链接,HTTP的工作开始。
b)建立连接后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,MIME信息包括请求修饰符、客户端请求的信息。
c)服务器接到请求后,给予相应的响应信息
d)客户端接收到服务器返回的信息通过浏览器显示出来,然后客户端与服务器断开连接。

HTTP连接
HTTP/1.0 为每个请求/回应都打开一个TCP连接,缺点:打开一个连接需要多次的信息往返,会导致整个过程很慢
HTTP/1.1 引入持久连接概念,通过Connection头部来部分控制连接
HTTP/2 通过一个连接多个消息的方式来保持始终保持为暖连接

URL详解
URL基本格式:schema://host[:port#]/path/…/;url-params[#anchor]
scheme : 指定低层使用的协议(例如:http, https, ftp)
host : HTTP服务器的IP地址或者域名
port#: HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的口,必须指明,例如 http://www.cnblogs.com:8080/
path: 访问资源的路径
url-params
query-string: 发送给http服务器的数据
anchor: 锚

HTTP协议是无状态的,意味着服务器不会在两个请求之间保留任何数据(状态),为了解决这个问题web程序引入了Cookie机制来维护状态,用来判断是否是同一个用户发送的请求。

HTTP协议定义了很多与服务器交互的方法:GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE,CONNECT对应资源的查,改,增,删, 获得报文首部,询问支持的方法,追踪路径,要求使用隧道协议连接代理。

状态码
1XX : 提示信息 – 表示请求已被成功接收,继续处理
2XX : 成功 – 表示请求已被成功接收,理解,接受
3XX : 重定向 – 要完成请求必须进行更进一步的处理
4XX : 客户端错误 – 请求有语法错误或请求无法实现
5XX :服务器端错误 – 服务器未能实现合法的请求

列举常见的几种状态码:
302: Found 重定向,新的url会在resp中的location中返回,浏览器会将使用新的url发出新的请求。
304: Not Modified 代表上次的文档已经被缓存了,使用缓存的文档

400: Bad Request 客户端请求与语法错误,不能被服务器所理解
403: Forbidden 服务器收到请求,但是拒绝提供服务
404: Not Found 请求的资源不存在,url错误

500: Internal Server Error 服务器发生了不可预期的错误
503: Server Unavailable 服务器当前不能处理客户端的请求

Request Headers
Accept: 用来告知客户端可以处理的内容类型。 /:所有类型
Accept-Encoding:gzip, deflate, br
Accept-Language:请求头允许客户端声明它可以理解的自然语言,并使用Content-Language 应答头通知客户端它的选择。zh-CN,zh;q=0.9,en;q=0.8 (;q=值代表优先顺序)
Connection:keep-alive 当页面请求完成之后,会保持和服务器的链接持续有效;close 在完成本次连接之后,断开连接
Host:客户端指定自己访问的web服务器的域名或者IP地址和端口号。localhost:3000
Referer:浏览器向web服务器表面自己是从哪个url获得当前请求的网址。http://localhost:3000/
User-Agent:用来告诉服务器,客户端使用的操作系统和浏览器的名称和版本信息。Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36

Response Headers
Access-Control-Allow-Origin:允许访问该资源的外域URL。*:表示不需要携带身份凭证请求
Cache-Control:no-store, no-cache, no-transform, must-revalidate, max-age=0
Cache-Control: 这个是非常重要的规则。 这个用来指定Response-Request遵循的缓存机制。各个指令含义如下
Cache-Control:no-store 所有内容都不会被缓存
Cache-Control:no-cache 会被缓存,但是每次都要向服务器评估缓存响应的有效性
Cache-Control:max-age=5 当访问此网页后的5秒内再次访问不会访问服务器
Cache-Control:min-fresh=5 客户端在指定的5秒内获取最新的响应
Cache-Control:max-stale=5 客户端愿意接收一个已经过期的资源,响应时间不能超过的时间
Cache-Control:only-if-cached 客户端只接收已经缓存的响应,并且不要向原始服务器检查是否有更新的拷贝
Cache-Control:Public 可以被任何缓存所缓存
Cache-Control:Private 内容只缓存到私有缓存中
Cache-Control:must-revalidate 缓存必须在使用之前验证旧资源状态,并且不可使用过期资源
Cache-Control:no-transform 不得对资源进行转换或转变
Connection:keep-alive
Content-Type:告诉客户端实际返回的内容类型。application/json; charset(字符编码标准)=UTF-8
Date:消息生成的日期和时间。Mon, 27 Nov 2017 07:40:53 GMT
Transfer-Encoding:指明将传递给客户所采用的编码形式。chunked数据以一系列分块的形式进行发送,content-length 在这种情况下不被发送。
Vary:Origin

未完待续…

    原文作者:HTTP
    原文地址: https://segmentfault.com/a/1190000012183808
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞