(1)请求头参数详解(Request):
第一行:
由请求方法+请求url+http协议版本构成,如
GET /Test/index.html HTTP/1.1。值得注意的是,请求url和Host属性组成完整的请求URL。
其他属性:
Host
:请求的主机和端口号。端口号可省略,默认为80。如6vhao.kkcaicai.com:8080;
User-Agent
:客户端的操作系统和浏览器的名称、版本;
Accept
:浏览器端可以接受的媒体类型,如image/jpeg,application/x-ms-application,*/*。*/*表示浏览器可接受任意类型的数据;
Referer
:表示从哪个页面链接过来的,如http:www.baidu.com即表示是从百度链接过来的;
Accept-Encoding
:代表浏览器声明自己的一些编码方法,主要为是否支持压缩等等,如gzip;
Accept-Language
:代表浏览器声明自己可以接收的语言,如zh-CN;
If-None-Match
:和response响应头中的ETag联合使用,作用为告诉response中可以添加一个ETag参数,当客户端再次请求同一个url时,通过服务器判断数据是否改变,如果后台数据没改变则返回一个304代码,代表浏览器可以使用自己的缓存数据,无需再次下发数据,节约流量及性能。如果数据变了则会返回正常的200及最新数据,浏览器接收到后会更新本地缓存。
If-Modified-Since
:把浏览器里缓存的最后修改时间发送到服务器,服务器会把这个时间和最新数据做对比,如果一致则返回304,不一致返回200和最新数据,浏览器接收到后会更新本地缓存。
Cache-Control
:遵循的缓存机制,代表对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。取值如max-age-43200,no-cache等等
(2)响应头参数详解(Response):
第一行:
由协议和状态码构成,如HTTP/1.1 304 Not Modified
其他属性;
Server:http
服务器的类型和型号;
Date
:生成这个response的具体时间;
Last-Modified
:这个资源的最后修改的时间;
ETag
:标识服务器信息的标志位,和request中的If-None-Match配套使用;
Expires
:表示浏览器在指定时期内才可以使用本地缓存,即缓存过期时间;
Cache-Control
:响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。下面的设置让客户端对响应内容缓存3600秒,也即在3600秒内,如果客户再次访问该资源,直接从客户端的缓存中返回内容给客户,不要再从服务端获取(当然,这个功能是靠客户端实现的,服务端只是通过这个属性提示客户端“应该这么做”,做不做,还是决定于客户端,如果是自己宣称支持HTTP的客户端,则就应该这样实现)。Cache-Control: max-age=3600 ;
Proxy-Connection
:代理连接,一般取值为keep-alive,代表当一个网页打开完成后,客户端和服务端传输的http连接不会关闭,如果下次再访问时则会复用这个链接不会再新建一个链接,防止资源浪费。
(3)http1.0和http1.1区别:缓存,带宽,Host头处理,长连接。
(4)http1.0和1.1存在的问题:
1.0在传输数据时都需要重新建立连接,增大延迟;
1.1在传输数据时都使用的明文,无法验证身份;
1.1头文件过大,增加传输成本;
1.1虽然有keep-alive弥补多次创建连接带来的延迟,但使用过多同样给服务器带来性能压力。
(5)get post区别:
提交的数据
:get放在url连接的?后面,post放在提交的request的body体内;
数据大小限制
:get有限制,post无限制;
取得变量的值的方式
:get通过Request.QueryString,post通过Request.Form;
安全问题
:get不安全,post相对安全。
(6)cookies和session:
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。Cookie可以弥补HTTP协议无状态的不足。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Cookie具有不可跨域名性。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中通过session id查找该客户的状态就可以了。
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里(也可存储于数据库,文件里)。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
区别:
存储位置
:cookie保存在客户端,session保存在服务器;
存取方式
:cookie存取的是字符串,session可存取任何格式的数据;
安全性(隐私策略)
:cookie存储于客户端,可被修改,session存储于服务器,安全性高;
有效期不同
:cookie相对有效期高,session链接关闭就失效;
对服务器造成的压力不同
:cookie不占用服务端资源,session在并发高时会占用服务器资源。
(7)https
定义:https并不是一个单独的协议,而是对工作在一加密连接(SSL/TLS)上的常规http协议,通过再TCP和http之间假如TLS来加密。
SSL协议是一种安全传输协议,TLS是SSL3.0的升级版。
(8)传输加密算法:
对称加密
(DES,3DES,AES,RC5,RC6):加密数据的密钥和解密数据的密钥是一样的,效率快;
非对称加密
(SSL,RSA):有两个密钥,私有密钥:服务端保管;公有密钥:服务端和客户端共有。
数字签名
:验证传输的数据内容是否被篡改,属于非对称加密,不过是反过来用私钥加密,用公钥解密;
数字签名的过程:
1、服务端把传输的内容通过hash处理成摘要信息Digest,摘要信息使用私钥加密后生成签名,服务器把签名和内容一并传送给客户端;
2、客户端收到数据后,把签名提取出来用公钥解密,如果能正常解密出Digest2,就证明是对方发来的;
3、客户端把内容做同样的hash处理,得到摘要信息Digest3,如果Digest2和Digest3相等则表示内容没被篡改。
数字证书(CA)
:验证客户端使用的公钥确实为真实服务器发送给自己的。
(9)TCP/IP网络模型(若为四种则去掉物理层):
物理层(实体层)
链接层
:协议(以太网协议规定了电信号的分组方式),mac地址(网卡地址),广播(mac比对,用于局域网等较少机器的情景)
网络层
(建立主机到主机间的通讯):作用(解决链接层的广播的局限性,实现全球联网。先通过IP找到这台计算机处于的子网络,在通过mac地址找到这台计算机),IP协议,IP数据包,ARP协议(用于通过IP地址找到这个IP内子网络中某个计算机的mac地址)
传输层
:建立端口到端口间的通讯,即确定属于哪个应用传输数据。
应用层
:规定应用程序的数据格式。
通过上述几层,传输的数据格式为:head(以太网标头,链接层的主机mac地址)+head(IP标头,网络层的IP地址)+head(TCP标头,传输层的端口号)+data(应用层数据包)
(10)DNS
提供的服务是用来将主机名和域名转换为ip地址。
查询过程:递归(缓存和联机查询)和迭代(基于服务器联机查询的独立和附加查询)。
解析过程:客户端首先查询hosts文件,如果有域名对应的ip就直接访问,没有就查询本地DNS解析缓存,也没有就查询TCP/IP参数中设置的本地首选DNS服务器(具有权威性),……具体如下图