HTTP相关

HTTP和HTTPS的区别?

  • HTTP超文本传输协议,被用于在浏览器和网站服务器之间传递信息。HTTP以明文的方式发送内容,不提供任何方式的数据加密。因此不适合传递一些敏感信息,比如信用卡号、密码等支付信息。
  • 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据的传递安全,HTTPS在HTTP的基础上,加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器的通信加密。

HTTPS和HTTP的区别主要如下:

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

1.HTTP状态码知道哪些?
100  继续发送请求

2xx  成功
200 请求成功

3xx 代表要么有缓存,要么有重定向
301 被请求的资源已永久移动到新位置(永久重定向),浏览器会记住
302 临时重定向,浏览器不会记住,因为很可能会恢复
304 如果客户端发送了一个带条件的GET请求,且该请求已经被允许,而文档内容被没有改变,而文档的内容被没有改变,则服务器应当返回这个状态码
307 短暂的重定向

4xx 代表请求错误(应为一些原因,你要的资源不能给你)
400 1.表示请求语法错误,无法被服务器理解,除非进行修改,否则客户端不应该再次提交这个请求。2。请求的参数错误
401 当前请求需要用户验证(未授权)
403 服务器已经理解请求,但是拒绝执行它(并没有出错,服务器拒绝访问)
404 请求失败,你请求的资源,并没有在服务器上找到

5xx 服务器出错了
500 服务器端源码出现了错误
503 由于临时的服务器维护或过载,服务器当前无法处理请求,这个情况是暂时的,一段时间后会回复
504 网关超时
505 服务器不支持使用的HTTP版本


2. HTTP缓存怎么做?
Cache-Control:max-age=300
当浏览器第一次向服务器发送一个请求,想要获取a.jpg的时候,服务器会发送完整的文件并附带额外的信息。
这些外信息包括:
1、Etag是服务器对a.jpg文件进行的编码,如果a.jpg在服务器端未被修改,Etag值就不会发生变化。
2、Cache-Control:max-age=300  表示文件有效时间是300秒
3、expires:Tue, 26 Dec 2028 03:07:55 GMT  文件的过期时间
4、last-modified:Mon, 07 Nov 2016 07:51:11 GMT  文件在服务器端最后一次被修改的时间。

当response header中同时出现了 expires 和 Cache-Control时, Cache-Control优先级高于 expires

浏览器会把完整的啊a.jpg文件和这些额外信息存储到本地.
假如浏览器在300秒以内,再次需要获取 a.jpg。那么浏览器就直接从缓存中读取数据,获得a.jpg(也就是使用强缓存)。
假如浏览器在超过300秒后,再次需要获取a.jpg。那么就需要使用协商缓存。

先要判断是否有Etag/if-none-match字段。如果有。
浏览器重新发送请求的时候会带上 If-None-Match:字段。字段的内容就是服务器返回数据的时候附带的Etag字段。
服务器接受到请求后,会拿请求中的If-None-Match:字段和服务器端a.jpg重新计算后的Etag字段进行比较。如果相等,那么服务器就会返回304状态码。
如果不相等,服务器就会发送新文件和新的Etag给浏览器。浏览器则获取新文件并更新该文件的Etag
如果没有Etag/if-none-match字段,重新发送请求的时候会根据Last-Modified/If-Modified-Since 字段进行判断。
也就是在发送的请求中,带上If-Modified-Since字段,字段的值,是服务器之前返回数据的时候附带的Last-Modified字段值。
浏览器收到请求后,会对比请求中的If-Modified-Since字段和服务器端资源的Last-Modified字段值。
如果字段值相同。那么就返回304状态码,告诉浏览器使用缓存。
如果不同,就返回被改动后的资源和最新的改动时间。


3.Cache-Control 和 Etag的区别是什么?

Cache-Control用来定义文件的缓存规则。
常见的值有
max-age=xxx 缓存的内容将在 xxx秒后失效
private 客户端可以缓存
public 客户端和代理服务器都可以缓存
no-cache 使用Etag/If-None-Match来验证缓存数据。
no-store 所有内容都不会缓存,强缓存和协商缓存都不会触发。浏览器会直接向服务器请求原始文件,并且请求中不带Etag字段。

Etag 当前资源在服务器的唯一标识(这个唯一标识的生成规则由服务器决定)

4. Cookie 和 Session 是什么?

HTTP是一种无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的链接。好比我们登录淘宝网站,当我们打开网站不同页面的时候,服务器无法识别是同一个用户打开的,也就意味着,每打开一个网页,就需要重新登录一次。
Cookie和Session 就是为了解决这个问题而提出来的两个机制。

Cookie是服务器在本地机器上存储的小段文本。是客户端保持用户状态的机制
客户端向服务器发起请求的时候,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把这个Cookie保存起来,当浏览器再次请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器接受到请求后,检测该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。


HTTP相关_第1张图片
image.png
  • Cookie的主要内容包括:名字,值,过期时间,路径和域。
    路径和域一起构成了Cookie的作用范围。

若不设置过期时间
则表示这个Cookie的生命周期为浏览器回话期间,关闭浏览器窗口,Cookie就消失。这种生命周期为浏览器会话期的Cookie,叫做session Cookie(会话Cookie).
会话Cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。

若设置了过期时间
浏览器会把Cookie保存在硬盘上,关闭后再次打开浏览器,这些Cookie仍然有效直到超过设定的过期时间,存储在硬盘上的Cookie,可以在不同的浏览器进程间共享。比如两个IE窗口。这种Cookie,叫做 Persistent Cookie(持续的Cookie)

  • Cookie的删除和修改
    修改:只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。
    删除:只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie
Session

Session是在服务器端记录客户状态的机制。它与Cookie的区别是,Session保存在服务器端,而Cookie保存在客户端。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。

当浏览器第一次发送请求的时候,服务器自动生成了---HashTable和Session Id来唯一标识这个HashTable,并将其通过响应发送到浏览器。
浏览器第二次发送请求,会将前一次服务器响应中的Session Id放在请求中,一并发送到服务器上,服务器从请求中提取Session Id,并和保存的所有 Session Id进行对比。找到这个用户对应的 HashTable

详细的过程:创建Session后,会把关联的Session Id通过setCookie添加到HTTP响应头中。
浏览器在加载页面时,发现响应头中有set-cookie字段,就把这个cookie种到浏览器指定域名下。
当下次刷新页面时,发送的请求会带上这条cookie,服务端在接受到后,根据这个session_id来来识别用户。

Cookie和Session的区别
1. cookie数据存放在客户端浏览器上,而session数据存放在服务器
2. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,session;而session存储的大小理论上没有限制。
3. cookie不安全,别人可以分析存放在本地的cookie,并进行cookie欺骗。考虑到安全,应该使用session
4. session会一定时间内保存在服务器上,当访问增多,会比较占用服务器性能,考虑到减轻服务器压力,可以使用cookie
5. 建议 将登陆信息等重要信息存放为session,其他信息可以存放为cookie
单点登录中,cookie 被禁用了怎么办?(一点登陆,子网站其他系统不用再登陆)
  • 单点登录的原理是后端生成一个 session ID,设置到 cookie,后面所有请求浏览器都会带上cookie,然后服务端从cookie获取 session ID,查询到用户信息。
  • 所以,保持登录的关键不是cookie,而是通过cookie 保存和传输的 session ID,本质是能获取用户信息的数据。
  • 除了cookie,还常用 HTTP 请求头来传输。但这个请求头浏览器不会像cookie一样自动携带,需手工处理
4. LocalStorage和Cookie的区别

在HTML5中,新加入了一个localStorage特性,主要用来作为本地存储来使用,它解决了Cookie存储空间不足的问题。

  1. LocalStorage中,一般浏览器支持的是5m大小,Cookie是4k
  2. Cookie会随请求被发送到服务器上,而LocalStorage不会

5. GET和POST的区别?

1、 GET请求把参数包含在URL中,而POST请求通过request body 传递参数。
2、 GET请求在URL中传递的参数是有长度限制的,大小不能超过1024字节,而POST没有。
3、 GET比POST更不安全,因为把参数直接暴露在URL中,所以不能用来传递敏感信息。
4、GE用来请求数据,而POST用来写数据。post不幂等(幂等的意思,不管发生多少次请求,结果都一样)
5、 GET请求参数会被完整保存在浏览器历史记录里,而POST中的参数不会被保留

  1. GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
  2. GET请求产生一个TCP数据包,而POST产生两个TCP数据包。
    长的说对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

从输入url到页面加载完成发生了什么?

1、浏览器的地址栏输入URL并按下回车。

2、浏览器查找当前URL是否存在缓存,并比较缓存是否过期。

3、DNS解析URL对应的IP。

4、根据IP建立TCP连接(三次握手)。

5、HTTP发起请求。

6、服务器处理请求,浏览器接收HTTP响应。

7、渲染页面,构建DOM树。

8、关闭TCP连接(四次挥手)。

你可能感兴趣的:(HTTP相关)