摘自百度百科:html
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为普遍的一种网络协议。全部的WWW文件都必须遵照这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。web
角色:客户端和服务端算法
首先,客户端发起一个与服务器的TCP链接,创建链接以后,A中的浏览器进程就能够经过Socket访问该TCP链接。浏览器
客户端A进程经过该TCP链接向服务端B发送一个HTTP请求报文(ASCII码),报文中包含(百度首页为例)安全
请求行(request line) : 3个字段:方法字段、URL字段和HTTP版本字段
GET / HTTP/1.1
请求头(header line) : 位于请求行以后
Host www.baidu.com
Connection keep-alive
Cache-Control max-age=0
Upgrade-Insecure-Requests 1
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Referer https://www.baidu.com/s?wd=Https&rsv_spt=1&rsv_iqid=0xc28e80ff00002ae1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=Http%25E5%258D%258F%25E8%25AE%25AE&rsv_pq=de652d0900004bfb&inputT=691&rsv_sug3=47&rsv_sug1=48&rsv_sug7=100&rsv_sug4=756
Accept-Encoding gzip, deflate, br
Accept-Language zh-CN,zh;q=0.9,en;q=0.8
空行 :
位于请求头和请求体之间,必需要有
请求体(entity body) : 在使用GET方法时,请求体为空。POST时能够相似以下格式:
username=test&password=123123服务器
HTTP服务器进程经过Socket接收到该请求报文,从存储器(内存或磁盘)中获得URL字段中指定的对象(如:/index.html),而后封装到响应报文中,经过Socket发送到客户端。
响应报文:网络
状态行(status line) :
HTTP/1.1 200 OK
响应头(header line):
Cache-Control: private
Connection: Keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 29 Mar 2018 16:01:47 GMT
Expires: Thu, 29 Mar 2018 16:01:46 GMT
Set-Cookie: BD_HOME=1; path=/
空行:
响应体(entity body):
<html>...</html>app
客户端收到响应报文后,将响应实体中的文件信息提取出来,用浏览器引擎绘制或者经过别的进程处理该数据。性能
实际中,可能一个HTML中有许多资源引用(如CSS文件,图片,JS文件等),对于每个引用对象,重复该过程(HTTP1.0短链接)
编码