Day46-http和www基础1
- 1. 用户访问网站基本流程
- 2. DNS系统解析基本流程
- 3. DNS功能
- 4. DNS树形结构介绍
- 5. DNS解析流程(核心)
- 6. 查看生产【授权DNS】并设置解析
- 7. dig查看实际DNS解析
- 8. 企业要不要搭建DNS服务器?
- 9. HTTP协议
- 10. HTTP协议版本
- 11. HTTP请求方法
- 12. 什么是HTTP状态码?
- 13. 查看响应头
- 14. HTTP报文 Http 消息 数据包
1. 用户访问网站基本流程
我们每天都会使用Web客户端上网浏览网页。最常见的Web客户端就是Web浏览器,如通用的微软Internet Explorer(IE)以及技术人员偏爱的火狐浏览器、谷歌浏览器等。当我们在Web浏览器里输入网站地址(例如:www.etiantian.org)时,很快就会看到网站的内容。这看起来很神奇的背后,到底是怎样的实现流程呢?也许普通的上网者无需关注,但作为一个IT技术人员,特别是合格的Linux运维人员,就需要清晰的掌握了。
下面老男孩就为大家揭晓从客户端用户在Web浏览器里输入网站地址,到看到网站内容的完整访问流程。
第一步:客户端用户从浏览器里输入www.etiantian.org网站地址,回车后,系统首先会查找系统本地的DNS缓存及hosts文件信息,查找是否存在www.etiantian.org域名对应的IP解析记录,如果有就直接获取到IP地址,然后去访问这个IP地址对应域名www.etiantian.org的服务器,一般第一次请求时,DNS缓存是没有解析记录的,而hosts多在内部临时测试时使用。
第二步:如果客户端本地hosts及DNS缓存及hosts文件没有www.etiantian.org域名对应的解析记录,那么,系统会把浏览器的解析请求发送给客户端本地设置的DNS服务器地址(通常称此DNS为LDNS,即Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端,如果没有,则LDNS会负责继续请求其他的DNS服务器。
第三步:LDNS会从DNS系统的(.)根开始请求www.etiantian.org域名的解析,针对各个层级的DNS服务器系统进行一系列的查找,最终会查找到etiantian.org域名对应的授权DNS服务器,而这个授权DNS服务器正是企业购买域名时用于管理域名解析的服务器,这个授权服务器会有www.etiantian.org对应的IP解析记录,如果此时没有,就表示企业的域名管理人员没有为www.etiantian.org域名做解析设置,即网站还没架设好。
第四步:etiantian.org域名的授权DNS服务器会把www.etiantian.org对应的最终IP解析记录(例如:1.1.1.1)发给LDNS。
第五步:LDNS把收到的来自授权DNS服务器www.etiantian.org对应的IP解析记录发给客户端浏览器,并且再LDNS把本地域名和IP的对应解析缓存起来,以便下一次更快地返回相同解析请求的记录,这些缓存记录在指定的时间(DNS TTL值控制)内不会过期。
第六步:客户端浏览器获取到了www.etiantian.org的对应IP地址,接下来,浏览器会请求获得的IP地址对应的网站服务器,网站服务器接收到客户的请求并响应处理(此处的处理可能是数百台集群的服务器系统,也可能是一台云主机),将客户请求的内容返回给客户端浏览器,至此,一次访问浏览网页的完整过程就完成了。
提示:
1)查看Windows客户端本地缓存的DNS解析记录命令为:
C:\ >ipconfig /displaydns 意思为Display the contents of the DNS Resolver Cache(显示DNS CACHE内容),“/displaydns”前要有空格
2)清除Windows客户端本地缓存的DNS解析记录命令为:
C:\ >ipconfig /flushdns 意思为Purges the DNS Resolver cache(清除DNS CACHE内容),“/flushdns”前要有空格
3)Windows系统下hosts域名解析记录位置为:
C:\Windows\System32\drivers\etc\hosts
2. DNS系统解析基本流程
DNS,全称Domain Name System
计算机网络诞生时候
通过IP地址访问服务器。
IP地址不好记:IP地址 1.1.1.1
发展到后来就用hosts,所有的访问服务器的主机hosts都加上解析记录
大家都把解析放到hosts,发生问题。每个人都要改HOSTS
增加网站记录,如何所有知道呢?
发明了DNS
在早期的IP网路世界里面每台电脑都只用IP地址来表示,不久人们就发现这样很难记忆,于是一些UNIX的使用者就建立一个HOSTS对应表,将IP和主机名字对应起来。这样用户只需输入电脑名字就可以代替IP来进行沟通了。如果你安装了Linux系统在/etc下面就可以找到这个hosts档案了,在NT的系统里你也可以在\winnt\system32\drivers\etc下面找到它。不过这个HOSTS档是要由管理者手工维护的,最大的问题是无法适用於大型网路而且更新也是件非常头痛的事情。这就是DNS大派用场的时候了。
上网配置了DNS服务器
当你输入域名的时候,就会有DNS服务器告诉你域名对应的IP是啥。
核心功能。把域名解析成IP。
企业上网如何让DNS知道他的域名?
1)注册用户,登录购买域名。
2)有一个域名管理平台(默认的DNS)。
3)解析记录记录。www.oldboyedu.com A 203.81.17.12(最高48-72小时) TTL值控制内,各级缓存不会过期。
3. DNS功能
-
A记录,即Address Record。把www.etiantian.org解析为对应的IP地址记录如1.1.1.1,这个从域名到IP的解析过程。
-
CNAME别名记录,这个别名解析功能常被CDN加速服务商应用。
img.oldboyedu.com A 解析到静态服务器上。
解析CNAME img.oldboyedu.com CNAME cdn.chinacache.com
-
MX邮件记录,这个MX记录功能,在购买或搭建邮件服务时会被用到。 oldboy@oldboyedu.com
-
PTR记录,反向解析,即把IP地址解析为对应的域名,和A记录的解析相反,邮件服务等业务中会用到。
DNS的记录类型
域名与IP之间的对应关系,称为"记录"(record)。根据使用场景,"记录"可以分成不同的类型(type),前面已经看到了有A记录和NS记录。
常见的DNS记录类型如下。
(1) A:地址记录(Address),返回域名指向的IP地址。
(2) NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
(3)MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。
(4)CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。
(5)PTR:逆向查询记录(Pointer Record),只用于从IP地址查询域名,详见下文。
4. DNS树形结构介绍
5. DNS解析流程(核心)
6. 查看生产【授权DNS】并设置解析
万网:被阿里云收购了。稳定、贵
新网:不太稳定,便宜。
7. dig查看实际DNS解析
[root@web01 ~]# dig +trace www.mi.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> +trace www.mi.com
;; global options: +cmd
. 2036 IN NS m.root-servers.net.
. 2036 IN NS j.root-servers.net.
. 2036 IN NS e.root-servers.net.
. 2036 IN NS l.root-servers.net.
. 2036 IN NS b.root-servers.net.
. 2036 IN NS k.root-servers.net.
. 2036 IN NS d.root-servers.net.
. 2036 IN NS c.root-servers.net.
. 2036 IN NS a.root-servers.net.
. 2036 IN NS f.root-servers.net.
. 2036 IN NS g.root-servers.net.
. 2036 IN NS i.root-servers.net.
. 2036 IN NS h.root-servers.net.
;; Received 228 bytes from 223.5.5.5#53(223.5.5.5) in 3 mscom. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20210720000000 20210706230000 26838 . euEShTjsD1piRvIE6wwvfDPxl8T3oWQCqhXP4+5bpXyJFz3AqfJBtoFO iKTHibNbmP5HMRJGgvnRVRfLj+D75A3MtrD1hOhRiZr9xslMtEtNOT9U DxGtEfaiA5SpnFLsR7PNbQQpqqYVpZivAs0eCfiqdZA2h+kCS0drgPQ0 8hQa8MeYbmMCLyS3GvPwimfYMAexa5iEJNshb33yrMXYSV3OckaalHpt wyMMVur7JB/eRKlIscR7VU0I5IZT4EhrHJztmYjrTUL2Lrberly1ezox 6YaWUgXuGtIt4v7xb+0QdCcpK5BJnkbFkd6McrgV13Q0BSNs/DLI2Itk g3lBzA==
;; Received 1170 bytes from 192.5.5.241#53(f.root-servers.net) in 5 msmi.com. 172800 IN NS ns3.dnsv5.com.
mi.com. 172800 IN NS ns4.dnsv5.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20210711042530 20210704031530 54714 com. BBrNtR/8F5DCnANvGfGIKZZcAS+8M3ppcXVtr7MNSffB2jzBnerLagPo DDg8rlDpbUxeiK5yybWcWYd9htjvYEantOJ7375uwZHMU/Db7uLwkkO0 1D5De46VQAU/Uqk6e6xUNO52OsdIkHPSY3MljbMiEHmPJAKUj3zpzHZg tup+48ovJvmeqgMeJ/HsVeMWQ/rqrZA1uW+OlIdhmnbjvg==
PTP54HK4K6768OSHJFN79CMO84LC7E4C.com. 86400 IN NSEC3 1 1 0 - PTP5KP781I2QA2B25ELJSS37TRBJ38HA NS DS RRSIG
PTP54HK4K6768OSHJFN79CMO84LC7E4C.com. 86400 IN RRSIG NSEC3 8 2 86400 20210711045403 20210704034403 54714 com. bA0OEaG7LMrDoi5dAflbaPnSl3ONdJCWwASS4uSVC3SxTXMxnSEk6muE xU6HsBD+Abp82zBiZI/JsC2de67U6/TaBWnlPRPTN6TQ/23izFL5LpC4 AgFR/+QNF1cF2TbEPooH275qEo+61w4hNYwvT06F+dXuDKDRJUh9boS+ 5IyUBNUlmC33qeakkv3iBq4qIXFlpSkevifP0GiXyv98RA==
;; Received 934 bytes from 192.35.51.30#53(f.gtld-servers.net) in 148 mswww.mi.com. 120 IN CNAME www.mi.com.mgslb.com.
mi.com. 600 IN NS ns4.dnsv5.com.
mi.com. 600 IN NS ns3.dnsv5.com.
;; Received 127 bytes from 61.151.180.52#53(ns4.dnsv5.com) in 28 ms[root@web01 ~]# dig +trace www.oldboyedu.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> +trace www.oldboyedu.com
;; global options: +cmd
. 2717 IN NS e.root-servers.net.
. 2717 IN NS b.root-servers.net.
. 2717 IN NS f.root-servers.net.
. 2717 IN NS h.root-servers.net.
. 2717 IN NS i.root-servers.net.
. 2717 IN NS c.root-servers.net.
. 2717 IN NS g.root-servers.net.
. 2717 IN NS a.root-servers.net.
. 2717 IN NS l.root-servers.net.
. 2717 IN NS k.root-servers.net.
. 2717 IN NS j.root-servers.net.
. 2717 IN NS m.root-servers.net.
. 2717 IN NS d.root-servers.net.
;; Received 228 bytes from 223.5.5.5#53(223.5.5.5) in 4 mscom. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20210720000000 20210706230000 26838 . euEShTjsD1piRvIE6wwvfDPxl8T3oWQCqhXP4+5bpXyJFz3AqfJBtoFO iKTHibNbmP5HMRJGgvnRVRfLj+D75A3MtrD1hOhRiZr9xslMtEtNOT9U DxGtEfaiA5SpnFLsR7PNbQQpqqYVpZivAs0eCfiqdZA2h+kCS0drgPQ0 8hQa8MeYbmMCLyS3GvPwimfYMAexa5iEJNshb33yrMXYSV3OckaalHpt wyMMVur7JB/eRKlIscR7VU0I5IZT4EhrHJztmYjrTUL2Lrberly1ezox 6YaWUgXuGtIt4v7xb+0QdCcpK5BJnkbFkd6McrgV13Q0BSNs/DLI2Itk g3lBzA==
;; Received 1177 bytes from 198.41.0.4#53(a.root-servers.net) in 206 msoldboyedu.com. 172800 IN NS vip1.alidns.com.
oldboyedu.com. 172800 IN NS vip2.alidns.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20210711042530 20210704031530 54714 com. BBrNtR/8F5DCnANvGfGIKZZcAS+8M3ppcXVtr7MNSffB2jzBnerLagPo DDg8rlDpbUxeiK5yybWcWYd9htjvYEantOJ7375uwZHMU/Db7uLwkkO0 1D5De46VQAU/Uqk6e6xUNO52OsdIkHPSY3MljbMiEHmPJAKUj3zpzHZg tup+48ovJvmeqgMeJ/HsVeMWQ/rqrZA1uW+OlIdhmnbjvg==
BQ0HE0JTMR5QP6RRPO2KBB533KN1RTS2.com. 86400 IN NSEC3 1 1 0 - BQ0HN6BHKLK1U8CS4K8N6T8GDRU0LPUS NS DS RRSIG
BQ0HE0JTMR5QP6RRPO2KBB533KN1RTS2.com. 86400 IN RRSIG NSEC3 8 2 86400 20210711045258 20210704034258 54714 com. iMbBZhVjk9nR99Ga/juH7XSqEb65jc6CpMAyP+INMWQiCL9CxdJlxvKM UnJkjJAqFDnphGL4Jqttd73mDHwzjc9LEwL74Tr+V/XB7G0wgvgwwRTd hQMoOfc2FLize7TiFNOaw166jJQ3n3rZKcBbCcWcmOca2+gr9bLu+yNT TkLeFqxmWZGg8QrTT6SESApe7KCnqGVjwShtxUHS5J9/Kg==
;; Received 1008 bytes from 192.54.112.30#53(h.gtld-servers.net) in 253 mswww.oldboyedu.com. 600 IN CNAME www.oldboyedu.com.w.kunlungr.com.
;; Received 92 bytes from 140.205.29.114#53(vip2.alidns.com) in 24 ms
8. 企业要不要搭建DNS服务器?
1)企业不会自建外网DNS,选择购买域名选择默认DNS。
2)大企业花钱买DNSPOD,F5智能DNS解析。
3)服务器端DNS服务器开源工具:bind、powerdns,bind比较流行(bind+view 智能DNS)。
4)大企业的服务器内网使用DNS替代内网HOSTS,搭建bind。
DNS、邮件服务 -----花钱买,不要搭建。
exchange+ad sendmail qmail postfix
263邮箱,阿里免费(50人),腾讯免费(100以内)。
我认为腾讯收购DNSPOD的最大目的,无非和收购康盛创想(Discuz!)一样,为的是抓住互联网上的广大站长。如果需要有进一步发展的话,可以和别的产品进行深度整合,推出新的服务。假如这样的话,我认为可能会对别的公司产生毁灭性的打击。当然,这也是大公司间竞争的需要。像阿里吧,现在已经收购了CNZZ、PHPWIND,还有中国最大的主机和域名提供商万网,推出了阿里云系列服务。同样,为了平衡实力或者竞争的关系吧,收购DNSPOD很有必要。或许今天站长的价值还不是太最重要,但谁敢保证明天还是这种情况呢?最保险的做法就是无论对手做了什么,我就及时跟进,这样肯定不会吃亏。我个人的观点认为,无论什么云计算,DNS服务都是最基础、最底层的服务,也最容易受忽略。但是一旦受到打击,将是毁灭性的。比如某国内著名互联网公司曾经出现的域名被劫持事件,就是一个很好的明证。DNSPOD在DNS安全方面拥有丰富的经验,在应对安全威胁、大流量访问方面都很厉害,所以腾讯收购DNSPOD赚大了。
DNS全解析
链接: https://blog.csdn.net/u012375924/article/details/76408947
链接: https://www.cnblogs.com/gopark/p/8430916.html
链接: http://www.ruanyifeng.com/blog/2016/06/dns.html
解析顺序
1) 浏览器缓存
当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
2) 系统缓存
当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
3) 路由器缓存
当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;
4) ISP(互联网服务提供商)DNS缓存
当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;
5) 根域名服务器
当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
6) 顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
7) 主域名服务器
主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;
8)保存结果至缓存
本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。
9. HTTP协议
HTTP协议,全称HyperText Transfer Protocol,中文名为【超文本传输协议】
HTTP的重要应用之一是WWW服务
HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初的目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法。
WWW服务 提供一种发布和接收HTML(一种页面标记语言)页面的方法。
HTTP协议的WWW服务应用的默认端口为80
加密的www服务,https的默认端口为443
HTTP协议是互联网上常用的通信协议之一。它有很多的应用,
但最流行的就是用于Web浏览器和Web服务器之间的通信,即WWW应用或称Web应用。
WWW,全称World Wide Web,常称为Web,中文译为“万维网”。 它是目前互联网上最受用户欢迎的信息服务形式。
HTTP协议的WWW服务应用的默认端口为80,另外的一个加密的WWW服务应用https的默认端口为443,主要用于网银、支付等和钱相关的业务。当今,HTTP服务、WWW服务、Web服务三者的概念已经混淆了,在本书中也视为相同,都是指当下最常见的网站服务应用。
10. HTTP协议版本
0.9 1.0 1.1(主流) 2.0
HTTP/1.0 简介
HTTP/1.0 是第一个得到广泛使用的HTTP版本。HTTP/1.0 在HTTP/0.9的基础上增加了HTTP请求头,可支持更多的请求方法,并且能对多媒体对象进行处理。HTTP/1.0 使得包含生动图片的Web页面和交互式表格成为可能,而正是这些页面和表格促使互联网被人们广泛地接受。HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
HTTP/1.1 简介
HTTP/1.1 的重点是修复HTTP设计中的缺陷,从可扩展性、缓存处理、带宽优化、持久连接、HOST 头、错误通知、消息传递、内容协商等多个方面都做了相关改进。HTTP/1.1是当前互联网主流的 HTTP 版本。
在连接方面,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和时间延迟。
在请求头方面,HTTP1.1增加了更多的请求头和响应头信息,来增强HTTP功能。例如:HOST 主机头功能,可以使得Web浏览器可以使用主机头名来明确表示要访问服务器上的哪个 Web 站点,这样就可以使用Web服务器在同一个IP地址和端口号上配置多个虚拟Web站点。
HTTP 1.1的持久连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive 时,客户端通知服务器返回本次请求结果后保持连接;Connection 请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP1.1 还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头等。
11. HTTP请求方法
1、什么是HTTP请求方法
客户端请求Web服务器时,告诉服务器要执行什么具体的动作。
GET 客户端请求指定资源信息,服务器返回指定资源。浏览网页的过程都是GET方法。
POST 将客户端的数据提交到服务器,例:注册用户。上传图片、视频,都是POST方法。
DELETE 请求服务器删除Request-URI所标识的资源。
MOVE 请求服务器将指定的页面移至另一个网络地址。
HEAD 只请求响应报文中的HTTP首部。
12. 什么是HTTP状态码?
HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。
状态码范围 | 作用描述 |
---|---|
100-199 | 用于指定客户端相应的某些动作 |
200-299 | 用于表示请求成功 |
300-399 | 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 |
400-499 | 用于指出【客户端错误】 |
500-599 | 用于指出【服务器端错误】 |
状态代码 | 详细描述说明 |
---|---|
200 - OK | 服务器成功返回网页,这是成功的http请求,返回的标准状态码。 |
301 - Moved Permanently | 永久跳转,所有请求的网页将永久跳转到被设定的新的位置,例如:从etiantian.org跳转到www.etiantian.org。 |
403 - Forbidden | 禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。 |
404 - Not Found | 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致。 |
500 - Internal Server Error | 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统的报错,一般为服务器的设置或者内部程序问题导致。例如:SElinux开启,而又没有为http设置规则许可,客户端访问就是500。 |
502 - Bad Gateway | 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题导致。 |
503 - Service Unavailable | 服务当前不可用,可能因为服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点。 |
504 - Gateway Timeout | 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给前端代理服务器。 |
13. 查看响应头
[root@web01 ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 277
Content-Type: text/html
Date: Fri, 26 Apr 2019 03:48:34 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
查看响应头的第一行。
[root@web01 ~]# curl -s -I www.baidu.com|head -1
HTTP/1.1 200 OK
[root@web01 ~]# curl -I www.baidu.com 2>/dev/null|head -1
HTTP/1.1 200 OK
生产环境常见HTTP状态码的博客文章见: http://oldboy.blog.51cto.com/2561410/716294
14. HTTP报文 Http 消息 数据包
HTTP报文可分为两种,
一种是从Web客户端发往Web服务器的HTTP报文,称为请求报文(Request Message)。
另外一种是从Web服务器发往Web客户端的报文,称为响应报文(Response Message)
HTTP的请求和响应报文的格式类似。
HTTP请求报文格式说明
报文格式 | 报文信息 |
---|---|
请求行 | 请求方法 URL 协议版本 |
请求头 | 字段名1:值1 字段名2:值2 …… 例如: Accept: image/gif, image/jpeg Accept-Language: zh-cn …… |
空行 | 空白无内容 |
请求报文主体 | GET方法没有请求报文主体,POST方法才有。 |
下面对HTTP请求报文的每个部分逐一阐述。
(1)请求行
请求行是请求报文的第一行,用来说明客户端想要做什么。内容由请求方法字段、URL字段和HTTP协议版本字段共3个字段组成,它们之间用空格分隔。下面以GET /index.html HTTP/1.1为例来说明请求报文的起始请求行信息详情。
请求报文的起始请求行信息
请求方法字段示例 | URL字段示例 | HTTP协议版本 |
---|---|---|
GET | /index.html | HTTP/1.1 |
(2)请求头部
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部的作用是客户端把请求的相关信息告诉给服务器,常见的请求头部信息。
常见的请求头部信息
请求头信息 | 说明 |
---|---|
Accept: image/gif, image/jpeg | 媒体类型 |
Accept-Language: zh-cn | 语言类型 |
Accept-Encoding: gzip, deflate | 支持压缩 |
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT;…) | 客户端类型 |
Host: www.etiantian.org | 主机名 |
与请求报文相关的最常用的请求头是Content-Type和Content-Length。
(3)空行
最后一个请求头部信息之后是一个空行,发送回车符和换行符,通知Web服务器空行以下不会有请求头部的信息了。
(4)请求报文主体
请求报文主体中包括了要发送给Web服务器的数据信息;请求报文主体不会应用于HTTP的GET命令方法,而是应用于POST方法。POST方法适用于需要客户填写表单的场合,请求报文的主体信息此处就不再举例了。
HTTP 响应报文(Response Message)介绍
HTTP 响应报文由起始行、响应头部(header)、空行和响应报文主体几个部分组成。
和 Http 请求报文格式类似。表 7-7 给出了 HTTP 响应报文的一般格式。
报文格式 | 报文信息 |
---|---|
起始行 | 协议及版本号 数字状态码 状态信息 |
响应头部 | 字段名 1:值 1 字段名 2:值 2 … 例如: Content-Type: text/html; charset=utf-8 Content-Length:78 … |
空行 | 空白无内容 |
响应报文主体 | I am oldboy,mysql blog is http://oldboy.blog.5lcto.com |
(1)起始行
响应报文的起始行,也叫状态行,用来说明服务器响应客户端请求的状况。一般为协议及版本号,数字状态码、状态情况。例如:HTTP/1.1200 OK。
(2)响应头部
和请求报文类似,起始行的后面一般有若干个头部字段。每个头部字段都包含一个名字和一个值,两者之间用冒号分隔。头部结尾也是以一个空行结束。常见的头部信息有:
Content-Type: text/html; charset=utf-8
Content-Length:78
......
(3)空行
最后一个响应头部信息之后是一个空行,发送回车符和换行符,通知客户端空行下文无头部信息了。
(4)响应报文主体
响应报文主体中装载了要返回给客户端的数据。这些数据可以是文本,也可以是二进制的(如图片、视频),下面是响应报文主体的html格式文本数据示例。
<html>
<head><title>oldboy's blog</title></head>
<body>
I am oldboy,mysql blog is http://oldboy.blog.5lcto.com
</body>
</htm1>
一个简单的请求报文和应答报文示例
整个http协议请求的工作流程如下:
1)终端客户在Web浏览器地址栏输入访问地址http:/www.etiantian.org/index.html。
2)Web浏览器请求DNS服务器把域名 www.etiantian.org 转换成 Web 服务器的IP地址,此处的解析过程就是DNS解析的原理流程,前面已经讲过了,此处不再赘述。
3)Web浏览器将端口号(默认是 80)从访问地址(URL)中解析出来。
4)Web浏览器通过解析后的IP地址及端口号与Web服务器之间建立一条 TCP 连接。
5)建立TCP连接后,Web浏览器向Web服务器发送一条HTTP请求报文,请求报文内容格式及信息细节前面已经讲过了,此处不再赘述。
6)Web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文,响应报文内容格式及信息细节前文也已经讲过了,此处不再赘述。
7)Web服务器关闭http连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕。
整个通信原理的重要知识点有:
用户访问网站的流程。
DNS 解析流程细节。
建立 TCP 连接过程(TCPIP 三次握手原理知识见老男孩其它书籍或课程)
发送 HTTP 报文及 HTTP 请求报文内容细节。
Web 服务器响应客户端请求处理细节(网站集群架构细节)(此处后文会讲到)
HTTP 响应报文的细节。
关闭 TCP 连接,涉及 TCP/IP 协议四次挥手原理知识见老男孩其它书籍或课程)
Linux下实践观察HTTP协议通信过程
读者可以使用Linux下工具curl、wget、tcpdump(wireshark)、fiddler等工具根据原理实践查看通信的过程。这里以curl为例讲解如下:
[root@m01 scripts]# curl -v www.baidu.com #<==使用-v参数或者wget命令—debug参数。* About to connect() to www.baidu.com port 80 (#0)
* Trying 220.181.111.37...
* Connected to www.baidu.com (220.181.111.37) port 80 (#0)> GET / HTTP/1.1 #<==请求行信息。
> User-Agent: curl/7.29.0 #<==以下两行为请求头部信息。
> Host: www.baidu.com
> Accept: */*
> #<==空行。
< HTTP/1.1 200 OK #<==响应起始行信息。
< Server: bfe/1.0.8.18 #<==以下若干行为响应头部信息,这部分内容可以很多。
< Date: Wed, 15 May 2019 08:41:35 GMT
< Content-Type: text/html
< Content-Length: 2381
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Connection: Keep-Alive
< ETag: "588604c8-94d"
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Pragma: no-cache
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
< Accept-Ranges: bytes
< #<==空行。
<!DOCTYPE html> #<==响应报文主体。
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc>…省略若干行…<a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
* Connection #0 to host www.baidu.com left intact
MIME类型
Web服务器会把通过Web传输的每个对象都打上名为MIME 类型(MIME type) 的数据格式标签。
MIME类型
URL,全称Uniform Resource Location,中文翻译为统一资源定位符
网址 就是URL
URI,全称Uniform Resource Identifier,中文翻译为统一资源标识符
URL是URI命名机制的一个子集
URI标识的更多,例如还有邮箱地址
http :// www.etiantian.org/oldboy/index.html
http :// www.oldboyedu.com/video/index.html