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_第1张图片

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

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第2张图片

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第3张图片

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第4张图片

 3、HTTP  protocol  概述

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第5张图片

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第6张图片

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

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第7张图片

HTTP 协议详解 —— URI、HTTP protocol、HTTP headers_第8张图片

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字节

 

你可能感兴趣的