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,它通过特定命名空间中的唯一名称来标识资源。

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

(3)统一资源标识符的语法 (URL)

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

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

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

 3、HTTP  protocol  概述

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

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

(3)报文—— 请求 + 回应

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

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.1          HTTP协议版本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-Length  response body的长度,也就是源码包的字节大小;
Last-Modified     即下载的文件在服务器端最后修改的时间;
Connection        keep-alive Nginx开启了TCP长连接;
ETag                 ETag HTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,
                        因为如果内容没有改变,Web服务器不需要发送完整的响应;
Accept-Ranges  响应头 Accept-Range 标识自身支持范围请求,字段值用于定义范围请求的单位。
206 Partial Content 
Accept-Ranges   告诉我们服务器是否支持指定范围请求及哪种类型的分段请求,这里是byte
Content-Range   告诉我们在整个返回体中本部分的字节位置,我们请求的是图片的前100字节