HTTP协议是主机和万维网服务器的通信协议。
HTTP是无状态的,这样可以简化服务器的设计。
HTTP 0.9
HTTP1.0版本默认是非持续连接,它的缺点在于一个TCP连接只能进行一次HTTP请求。但是一个浏览器可以一次性打开多个TCP连接。Chrome是6个。
HTTP1.1默认是持续连接:一个TCP连接可以用于多次HTTP请求。
HTTP1.1的持续连接有两种工作方式:1、非流水线方式:客户在收到前一个响应后才能进行下一个请求。2、流水线方式:客户可以不断发送HTTP请求报文。
代理服务器:代理服务器是一种网络实体,又称为万维网高速缓存。
代理服务器把最近的HTTP请求和响应存在本地磁盘中,当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应。而不需要按URL的地址再次去因特网访问该资源。代理服务器可以在客户端和服务端工作,也可以在中间系统工作。
代理服务器的作用:降低时延。
1、校园网中PC去因特网服务器请求服务时,先与校园网的代理服务器建立连接。并向代理服务器发出HTTP请求报文。
2、若代理服务器已经存放了所请求的对象,代理服务器直接返回给客户机。
3、否则,代理服务器就代表客户机向因特网上的服务器建立连接(类似DNS的递归查询),因特网服务器把请求内容返回给代理服务器,,代理服务器收到内容后,先存在本地,然后再返回给客户机。
HTTP报文格式:
每一行以CR LF结尾,而且首部行和实体主体之间也有一个CR LF回车换行。
回车”(Carriage Return)和“换行”(Line Feed)起源
请求方法:
get:请求指定的页面信息
post:提交数据,提交表单或者文件
head:类似于get,但是只获取报头信息
options:请求一些选项信息
put:对指定资源位置进行更新
patch:对指定资源进行局部更新
delete:删除指定位置的资源
trace:回显服务器收到的请求,用于测试和诊断
connect:用于代理服务器
首部行
Connection: keep-alive表示持续连接
状态码:
1:服务器已收到请求、正在处理
2:表示成功
3:重定向 301永久转移 302暂时转移
4:客户端错误(请求中有错误的语法404 url不存在)
5: 服务端错误
Cookie和Session
服务器给客户机传输cookie是通过Set-cookie这个首部行实现的。
服务器的响应报文是Set-cookie:id_cookie = 1234(这个值应该就是session id 把)
浏览器接收后把它存在本地,当它再次访问该网站时:请求报文的首部行就是cookie:1234
Cookie和Session能够让服务器记住用户,常实现的功能有:记住帐户密码、购物车
HTTP头域分为四种:通用头域、请求头域、响应头域和实体头域。每个头域由一个域名、冒号和域值三部分组成,域名大小写无关,域值前可以添加任何数量的空格符。
通用头域
通用头域是指请求和响应都支持的HTTP头域,最常见的有Cache-Control、Connection和Transfer-Encoding,具体含义如下:
(1) Cache-Control:指定请求和相应遵循的缓存机制,最常见的值是no-cache,指示请求和响应消息不能缓存;
(2) Connection:用于指定处理完本次请求/响应后,客户端和服务器是否还要继续保持连接。
(3) Transfer-Encoding:用于指定实体内容的传输编码方式。
请求头域
请求头域是只有在请求头中带有的,用于向服务器传递关于请求或者关于客户端的附件信息。常见的有:Accept、Accept-Encoding、Accept-Language、Accept-Charset、Host、Referer、User-Agent和Cookie,具体含义如下:
(1) Accept: 用于指定客户端程序能够处理的MIME类型,多个时用逗号隔开;
(2) Accept-Encoding:指定客户端程序支持的压缩方式;
(3) Accept-Language: 指定客户端期望返回哪个国家语言的文档;
(4) Accept-Charset:指定客户端程序可以使用的字符集;
(5) Host:指定资源所在的主机名和端口号;
(6) Referer:指定请求uri的源资源地址,也就是用户从哪个uri过来,允许服务器生成回退链表;
(7) User-Agent:浏览器客户端信息,如使用哪种浏览器等;
(8) Cookie:服务器在浏览器端留下的信息,这是最重要的请求头字段之一。
实体头域
HTTP请求和响应中都可以包含实体头域,实体头域包含实体内容的一些信息。常见的实体头域有:Content-Encoding、Content-Length、Content-Type和Expires,具体含义如下:
(1) Content-Encoding:指明实体内容采用的压缩方式;
(2) Content-Length:指明实体内容的长度,单位为字节;
(3) Content-Type:指定实体内容的MIME类型;
(4) Expires:指明实体内容在什么时间之后过期,不再缓存。
因此,由Content-Length头域标明后续的实体内容的字节长度,浏览器或者服务器根据解析出来的Content-Length去读取后续的实体内容。以此来判断是否传输完数据