http协议的出现
现实中,我们存在各种各样的情况。
我的电脑的浏览器不支持解析XML文件,我的电脑更喜欢解析jpg而不是gif图片。
我的用户是中文用户,我的用户是英文用户。
这些对于内容的要求,我们需要进行协商。
服务器的IP号通过DNS解析可以获得,那么服务器中具体服务我的软件的端口是什么?
端口我们需要进行规定
经常性的重复界面访问,难道每次都让服务器给你响应吗?本地需要进行缓存。
那么缓存的数据是不是已经被服务器进行了更新,客户端需要知道什么时候弃用自己的缓存进行新数据的请求,这点我们需要进行协商
同一个网站上存在不同的资源,分布在这个网址的不同页面。难道我需要给每个页面都设置一个端口?所以请求的数据需要进行规定
这上面一切的问题都需要解决。所以如果只是简单的发出一个请求到正确的IP下。
希望,服务器返回正确页面的数据,然后浏览器应用层进行渲染显示。
这个希望是不现实的。
所以我们出现了HTTP协议。
http协议以广而告之的方法,要求浏览器的制造商和服务器的编写者。按照http要求的格式进行内容编写,从而进行数据的传输。然后双方就可以根据http协议的规范,了解对方的各种(除传输内容外)数据的含义。
http协议将数据的传输分为请求和响应。
无论是请求还是响应本质上都是字符串(数据)。
http协议规定
字符串的第一行是 请求行(响应行)
第二行开始是 请求头(响应头)
在请求头(响应头)和请求体(响应体)之间以一个空行进行分割
举一个真实场景下的例子:
POST /search HTTP/1.1
Accept: image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword,
application/x-silverlight, application/x-shockwave-flash, /
Referer: http://www.google.cn/
Accept-Language: zh-cn Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 2.0.50727; TheWorld)
Host: <ahref=“http://www.google.cn”>www.google.cn
Connection:Keep-Alive
Cookie:PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
hl=zh-CN&source=hp&q=domety
上面这个就是一个符合http协议的沟通,这个沟通是客户端发送给服务器的。
举个例子,当你输入用户名密码,然后点击登陆的时候就会发送一个类似的请求。
第一行是 请求行“POST /search HTTP/1.1 ”说明自己的请求类似是post然后使用的协议版本
然后最后一行是 浏览器发送给服务器的数据“&”是数据的分隔符。
本次请求中这次浏览器给服务器发送了三个数据。
中间的其他部分就是请求体了,他和浏览器之间进行了各种各样的内容协商等等。
如果想要了解请求体细节 拓展阅读: https://www.cnblogs.com/chenliyang/p/6558756.html
同时在http协议下,我们规定了80端口是网页服务的默认端口。
所以DNS解析之后,浏览器将自动的向解析之后的IP的80端口 发出请求(即传输数据,等待对方回传数据)
同时http协议,目前要求浏览器和服务器之间用TCP的协议在运输层传输上述的数据。
到这里对于这个问题:
从输入网址到出现网页到底发生了什么?
的铺垫已经全部完成,下一节将进行小结,并带领大家实现一个简单的符合http协议的脚本(服务器)和浏览器进行交流
从输入网址到出现网页到底发生了什么?(五)