黄玮
In fact, each RFC has a status, relative to its relation with the Internet standardization process: Informational, Experimental, or Standards Track (
Proposed Standard
,Draft Standard
,Internet Standard
), or Historic.
传统观点
现代观点
IRI (International Resource Identifier):URI语法的扩展,用来支持非ASCII字符集,例如UTF-8就是最为广泛支持的字符编码集合。
This document was written by the URI working group of the Internet Engineering Task Force.
完整定义详见「RFC 1738」 5. BNF for specific URL schemes
。
genericurl = scheme ":" schemepart
scheme = 1*[ lowalpha | digit | "+" | "-" | "." ]
schemepart = *xchar | ip-schemepart
ip-schemepart = "//" login [ "/" urlpath ]
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
"a" | "b" | "c" | "d" | "e" | "f"
escape = "%" hex hex
unreserved = alpha | digit | safe | extra
uchar = unreserved | escape
xchar = unreserved | reserved | escape
以下内容摘录自「RFC 1738」3.3. HTTP
http://<host>:<port>/<path>?<searchpart>
//<host>:<port>/<path>?<searchpart>
For resiliency, programs interpreting URI should treat upper case letters as equivalent to lower case in scheme names (e.g., allow “HTTP” as well as “http”).
用户视角的基本Web技术架构
组件视角的基本Web技术架构
NetCraft在2020年3月根据全球257,194,796个站点、1,263,025,546台服务器的信息统计结果绘制更新以下Web服务器市场占有率统计图
Alexa排名全球前1000万网站使用WEB服务器统计
据w3techs在2020年3月27日的统计数据表明:
Cloudflare 是一家以全球「内容分发网络」(CDN)起家的公司,目前可以提供包括内容交付优化、Web 应用程序防火墙、分布式拒绝服务(DDoS)缓解、SSL 等多种互联网「安全增值」服务。根据 nginx.com 上的一篇文章 我们可以进一步了解到 nginx
在 Cloudflare
旗下 CDN
产品的广泛应用。
其他视角探索WEB服务器的市场占有率
接下来,我们重点关注
核心特性列表
商业版支持nginx plus
基于OpenResty构建的API网关和微服务管理系统
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
早期项目开发者中包括OpenResty项目的核心开发者,因此和OpenResty具有很多相同或相似特性(例如Lua支持)
VeryNginx基于lua_nginx_module(openrestry)开发,实现了高级的WEB防火墙、访问统计和其他的一些功能。集成在Nginx中运行,扩展了Nginx本身的功能,并提供了友好的Web交互界面。
以下摘自cURL的man手册页说明:
curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction.
curl offers a busload of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer resume, Metalink, and more. As you will see below, the number of features will make your head spin!
以下摘自RFC 2616:
The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, protocol which can be used for many tasks beyond its use for hypertext, such as name servers and distributed object management systems, through extension of its request methods, error codes and headers [47]. A feature of HTTP is the typing and negotiation of data representation, allowing systems to be built independently of the data being transferred.
# 标准HTTP GET请求标准静态Web Server
curl -v http://www.cuc.edu.cn
# 标准HTTP GET请求有前端缓存系统的静态Web Server
curl -v https://www.qq.com -o q.html
curl -v https://www.taobao.com -o t.html
# 标准HEAD请求
curl -v -I http://www.cuc.edu.cn -o s.html
# 服务器端使用自定义HTTP响应头
curl -v https://www.baidu.com
curl -vv https://www.alipay.com
# 处理302和301重定向
curl -vv -L http://www.baidu.com
# 使用自定义User-Agent,绕过服务器端对客户端类型的检测和限制
curl -vv -L -A "Android 250.0" https://www.baidu.com -o baidu_a.html
curl -vv -L https://www.baidu.com -o baidu_c.html
# 比较使用不同User-Agent访问百度首页得到的页面差异
vimdiff baidu_a.html baidu_c.html
# GET传参
curl -vv 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E4%BC%A0%E5%AA%92%E5%A4%A7%E5%AD%A6' -o baidu_cuc_curl.html -L
curl 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E4%BC%A0%E5%AA%92%E5%A4%A7%E5%AD%A6' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36' -o baidu_cuc_mac.html -L
# 比较使用不同User-Agent进行百度搜索得到的结果差异
vimdiff baidu_cuc_curl.html baidu_cuc_mac.html
# 启用传输流压缩
curl -vv -H 'Accept-Encoding: gzip, deflate' https://www.baidu.com -o baidu.html.gz
# 使用自定义HTTP Request Header + POST表单数据
# TODO-1 请模拟学校教务处网站的登录表单完成命令行登录学校教务处任务
# TODO-2 模拟登录自己搭建的wordpress站点并使用curl发表一篇blog
注意到上面所有服务器设置的时间均使用到了一个关键词GMT,简单来说这是为了解决全球不同地区的时区差异问题而进行的一项关于时间的标准化设置。