linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers

一、HTTP 协议详解 1、HTTP简介 HTTP--Hyper Text Transfer Protocol,超文本传输协议
是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。
2、URI 统一资源标识符(Uniform Resource Identifier,或URI)
HTTP 请求的内容通称为"资源"。每个资源都由一个 (URI) 来进行标识。URL即统一资源定位符,它是 URI 的一种。一份文档,一张图片,或所有其他。URI包含URL,URN
(1)URL 用于定位
全称叫做:统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址
URL 由多个必须或可选的组件构成。下面给出了几个 URL:
https://developer.mozilla.org/en-US/search?q=URL
在浏览器的地址栏中输入上述任一地址,浏览器就会加载相应的网页(资源)。
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
(2)URN 用于命名
URN仅用于命名,而不指定地址。用于标识唯一书目的ISBN系统是一个典型的URN使用范例。
例如,ISBN0486275574(urn:isbn:0-486-27557-4)无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。
URN 是另一种形式的 URI,它通过特定命名空间中的唯一名称来标识资源。
linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

(3)统一资源标识符的语法 (URL)
linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

3、HTTPprotocol概述 linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

(3)报文—— 请求 + 回应
linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
文章图片

4、HTTP headers 目的
wget下载一个源码包,分析HTTP头部的信息
通过 wget -d 选项,学习HTTP头部字段信息。
了解http通信原理,为后期优化打下基础。
(1)执行下载

wget -d http://nginx.org/download/nginx-1.12.1.tar.gz
(2)分析Debug信息
DEBUG output created by Wget 1.14 on linux-gnu.
---request begin---请求开始
GET /download/nginx-1.12.1.tar.gz HTTP/1.1动作下载 页面地址 HTTP版本
User-Agent: Wget/1.14 (linux-gnu)代理程序:wget
Accept: */*接收的类型:任何类型
Host: nginx.org目标主机:nginxorg
Connection: Keep-Alive链接类型:启动长连接
---request end---请求结束
HTTP request sent, awaiting response...发送请求中

---response begin---响应开始
HTTP/1.1 200 OK协议版本 状态码 结果
Server: nginx/1.13.3服务器版本
Date: Fri, 06 Oct 2017 09:05:15 GMT相应时间
Content-Type: application/octet-stream接收应用类型:字节流(软件类)
Content-Length: 981093文档大小
Last-Modified: Tue, 11 Jul 2017 15:45:09 GMT资源最后修改的时间(stat文件即可查看)
Connection: keep-alive长连接开启
Keep-Alive: timeout=15长连接有效期
ETag: "5964f285-ef865"校验值
Accept-Ranges: bytes接收范围:字节的范围
---response end---
200 OK
Registered socket 3 for persistent reuse.
Length: 981093 (958K) [application/octet-stream]
Saving to: ‘nginx-1.12.1.tar.gz’
(3)相关资料
HTTP/1.1HTTP协议版本1.1;
200 OK响应的状态码是200,即正常返回数据,不同场景会有其它如2xx、3xx、4xx、5xx;
Server服务器软件是Nginx,版本是1.13.3;
Date从服务器获取该资源时间,时间差8小时,时区不同;
Content-Type响应的数据类型,这里的资源是文件,则是application/octet-stream了,其它还有图片,
视频、json、html、xml、css等;
Content-Lengthresponse body的长度,也就是源码包的字节大小;
Last-Modified即下载的文件在服务器端最后修改的时间;
Connectionkeep-alive Nginx开启了TCP长连接;
ETagETag HTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,
因为如果内容没有改变,Web服务器不需要发送完整的响应;
Accept-Ranges响应头 Accept-Range 标识自身支持范围请求,字段值用于定义范围请求的单位。
206 Partial Content
Accept-Ranges告诉我们服务器是否支持指定范围请求及哪种类型的分段请求,这里是byte
Content-Range告诉我们在整个返回体中本部分的字节位置,我们请求的是图片的前100字节
【linux|HTTP 协议详解 —— URI、HTTP protocol、HTTP headers】

    推荐阅读