当前位置:首页 > IT技术 > Web编程 > 正文

HTTP相关--知识点
2021-09-30 17:00:59

一、输入url到网页显示出来中间的过程

  1. 首先,在浏览器地址栏中输入url
  2. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
  3. 在发送http请求前,需要域名解析(DNS解析)(DNS(域名系统,Domain Name System)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住IP地址。),解析获取相应的IP地址。
  4. 浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。(TCP即传输控制协议。TCP连接是互联网连接协议集的一种。)
  5. 握手成功后,浏览器向服务器发送http请求,请求数据包。
  6. 服务器处理收到的请求,将数据返回至浏览器
  7. 浏览器收到HTTP响应
  8. 读取页面内容,浏览器渲染,解析html源码
  9. 生成Dom树、解析css样式、js交互
  10. 客户端和服务器交互
  11. ajax查询

二、HTTP和HTTPS的基本概念

  HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

  HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

  HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

三、HTTP与HTTPS有什么区别?

  HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

  HTTPS和HTTP的区别主要如下:

  1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

四、一个HTTP请求报文是什么样的?(GET举例)

     http的请求报文和响应报文的格式基本一样,主要分为三部分:

  1. 起始行(start line): 描述请求或响应的状态
  2. 头部字段(header): 以 key:value 的形式展示
  3. 数据实体(entity/ body) :实际要传输的数据,可以是文本,也可以是图片、文件、视频等二进制数据

五、常见的请求 Header 头

        Request header:Host: www.test.com/ //请求的目标域名和端口号
        Origin: http://localhost:8081/ //请求的来源域名和端口号 (跨域请求时,浏览器会自动带上这个头信息)
        Referer: https:/localhost:8081/link?query=xxxxx //请求资源的完整
        URI User-Agent //浏览器信息
        Cookie: //当前域名下的
        Cookie Accept: text/html,image/apng //代表客户端希望接受的数据类型是html或者是png图片类型
        Accept-Encoding: gzip, deflate //代表客户端能支持gzip和deflate格式的压缩 Accept-Language: zh-CN,zh;q=0.9 //代表客户端可以支持语言zh-CN或者zh(值得一提的是q(0~1)是优先级权重的意思,不写默认为1,这里zh-CN是1,zh是0.9)
        Connection: keep-alive //告诉服务器,客户端需要的tcp连接是一个长连接
        If-None-Match //如果内容未改变返回304代码,对应Etag
        If-Modified-Since //对应last-midified,未被修改则返回304代码
        Response header:
        Date: //服务端发送资源时的服务器时间
        Expires: //缓存过期时间
        Cache-Control: no-cache // 缓存方式
        Etag // 文件内容
        hash Last-Modified //最近一次文件修改时间
        Content-Type: text/html; charset=utf-8 //编码格式
        Content-Encoding: gzip //采用gzip对资源进行解码
        Connection: keep-alive //tcp是长连接
        Set-Cookie //设置Http Cookie

六、tcp三次握手,四次挥手

        第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
        第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
        第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

       为什么连接的时候是三次握手,关闭的时候却是四次握手?

       因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

       为什么不能用两次握手进行连接?

       3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

七、Get和post的区别

        GET在浏览器回退时是无害的,而POST会再次提交请求。
        GET产生的URL地址可以被Bookmark,而POST不可以。
        GET请求会被浏览器主动cache,而POST不会,除非手动设置。
        GET请求只能进行url编码,而POST支持多种编码方式。
        GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
        GET请求在URL中传送的参数是有长度限制的,而POST么有。
        对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
        GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
        GET参数通过URL传递,POST放在Request body中。

        GET和POST还有一个重大区别,简单的说:
        GET产生一个TCP数据包;POST产生两个TCP数据包。
        长的说:
        对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
        而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
        应用的区别:
        如下情况使用GET方法:客户端与服务端的交互像是一个提问(如查询操作、搜索操作、读操作)
        如下情况使用POST方法:
        1.交互是一个命令或订单(order),比提问包含更多信息
        2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务
        3.用户需要对交互产生的结果负责

八、Cookie和Session的区别

        1.存储位置不同
           cookie的数据信息存放在客户端浏览器上。
           session的数据信息存放在服务器上。
        2.存储容量不同
           单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
           对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
        3.存储方式不同
           cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。
           session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
        4.隐私策略不同
           cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
           session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。
        5.有效期上不同
           开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
           session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
        6.服务器压力不同
           cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
           session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
        7.浏览器支持不同
           假如客户端浏览器不支持cookie:
           cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。
           运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。
           假如客户端支持cookie:
           cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。
           session只能在本窗口以及子窗口内有效。
        8.跨域支持上不同
           cookie支持跨域名访问。
           session不支持跨域名访问。

九、Session的储存

        1.files
           文件存储,默认存储方式
           可通过设置session.save_path指定session存储位置,此方式常见,默认即可使用。
        2.redis
           redis存储,需要安装redis扩展
           在redis-cli中查看key
        3.memcached
           memcached存储,需要安装memcached扩展,此扩展再phpinfo中查看名称为memcache

 

本文摘自 :https://www.cnblogs.com/