网络 http(基于tcp协议)

  • Post author:
  • Post category:其他


(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服务器(具有权威性),……具体如下图

这里写图片描述



版权声明:本文为u013325929原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。