# http 常被问到的基本知识

  1. UDP与TCP基本区别
    1. TCP要求系统资源较多,面UDP较少
    2. TCP采用流模式,UDP采用数据报模式
    3. TCP保证数据的正确性,UDP可能丢包
    4. TCP保证数据顺序,UDP不保证
    5. 使用时socket()参数不同
  2. HTTP请求过程:
    1. 应用层(HTTP数据)【发送端】
    2. 传输层(TCP首部 + HTTP数据)
    3. 网络层(IP首部 + TCP首部 + HTTP数据)
    4. 链路层(以太网首部 + IP首部 + TCP首部 + HTTP数据)
    5. 接受端再一层层把对应的首部消去
  3. DNS简介
    1. 客户端向DNS进行域名查询请求,DNS服务器告知客户端Web服务器的IP地址,客户端与服务器进行通信
    2. 如果域名正好被服务器缓存,那么直接返回,否则要根据是几级域名,进行查找。
  4. 浏览器返回,是否会再次请求?是否会被浏览器主动 cache? 是否只支持 url 编码?请求参数是否会被完整的保存在浏览器历史记录里?请求参数长度限制?参数类型只支持 ASCII?
    1. GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
    2. GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
    3. GET 请求只能进行 url 编码,而 POST 支持多种编码方式。
    4. GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留;GET 产生的 URL 地址可以被 Bookmark,而 POST 不可以。
    5. GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。
    6. GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息;GET 参数通过 URL 传递,POST 放在 Request body 中。
    7. 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
  5. GET 与 POST 请求产生几个数据包?其他的不同?
    1. GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
    2. GET 产生一个TCP数据包, 把header与data一起发过去, 等待服务器响应
    3. POST 时, 浏览器先发送header, 服务器响应100 continue, 浏览器再发送data, 等待服务器响应(非FF), 网络环境差的时候, 两次包的TCP在验证数据完整性上有非常大的优势
    4. GET请求的数据会附在URL之后,而POST提交的数据 是在HTTP包的包体中
    5. 传输数据大小不同
    6. 安全性不同,通过GET提交的数据,会明文出现在URL上
    7. GET请求是幂等性的,所以不能用GET请求做数据的增删改有副作用的操作;因为是幂等的,在网络不好的隧道中会尝试重试,用GET请求可能会造成重复操作。
  • ARP 解析地址的协议,可以通过IP地址反查出对应的MAC地址
  • CONNECT 使用隧道协议进行TCP通信,主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后以过网络隧道传输
  • 持久链接:keep-alive,管线化