diveDylan / blog

My blog, detail is in the issues list
2 stars 0 forks source link

HTTP和HTTPS #6

Open diveDylan opened 5 years ago

diveDylan commented 5 years ago

面试互联网相关职位,http和https总是绕不过的话题,虽然平时工作暴露在这一层的工作量并不多,但是这也是编程行业的基础吧。

http

http也就是我们常说的超文本传输协议,英文术语Hyper Text Transfer Protocol,用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。同时说的http也不得不提到tcp会话级协议,它们的关系可以用一句话解释:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

TCP: Transmission Control Protocol 传输控制协议 IP : Internet Protocol 网际协议。

http的一些特点

  1. http工作于客户端和服务端架构上,总是客户端(常为浏览器发起请求),服务端处理请求,返回数据
  2. http的默认端口是80,https默认是443
  3. http请求是无连接的,无连接指的是http限制每次只处理一个请求,在服务器处理完客户端的请求,收到客户端的回应时,就会断开当前连接,这样可以节约传输时间
  4. http是无状态的,它对事务是没有记忆能力的。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。这里的状态指的是一种表单登陆注册之类的状态,不是指的缓存,是一种状态的记录,现代应用中常用的cookiesession就是一种状态
  5. http不限定媒体类型,只要mine-type支持,客户端和服务端知道以何种方式处理

GET & POST

GET: 1、请求参数将出现在URL体上,浏览器对URL的字节长度有限制(不是http协议) 2、GET是无害的,一般只做一种取的动作 3、GET数据类型只允许 ASCII 字符 4、GET会被缓存(会出现在浏览器的历史纪录中),可被浏览器收藏

POST: 1、POST一般是表单类提交,会进行一种注册的更改 2、数据长度没有限制 3、请求数据体一般不出现在URL中

HTTP 应答码

常用返回码: 301 Moved Permanently---资源永久移动 302 Found---资源临时移动 304 Not Modified---未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源(如何理解304状态) 400 Bad Request---客户端请求的语法错误,服务器无法理解 404 Not Found---服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 405 Method Not Allowed---客户端请求中的方法被禁止 500 Internal Server Error---服务器内部错误,无法完成请求 502 Bad Gateway---作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应

HTTPS

https是在http协议和tcp协议上加了一层加密协议SSL和TLS协议,关系如图所示 image

TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。 下图是https的请求过程和加密详情 image 关于为什么要采用这种方式进行加密,掘金上有一篇文章从窃听、伪造、否认三个角度讲解https加密和链接过程(完全图解 HTTPS

打开一个地址发生了啥

  1. 输入url浏览器首先进行DNS域名解析,在DNS缓存中寻找是否有改域名, 否的话,一级一级上寻
  2. 然后TCP三次握手建立http连接
  3. 客户端发送http请求包,服务端返回应答包
  4. 客户端加载资源,渲染DOM