HTTP协议重点

HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

浏览器输入地址到页面展示经历过程:
1、浏览器输入url。先解析url地址是否合法

2、浏览器检查是否有缓存(浏览器缓存-系统缓存-路由器缓存)。如果有,直接显示。如果没有,跳到第三步。

3、在发送http请求前,需要域名解析(DNS解析),解析获取对应过的ip地址。

4、浏览器向服务器发起tcp链接,与浏览器建立tcp三次握手

5、握手成功后,浏览器向服务器发送http请求,请求数据包

6、服务器收到处理的请求,将数据返回至浏览器

7、浏览器收到http响应。

8、浏览器解析响应。如果响应可以缓存,则存入缓存

9、浏览器发送请求获取嵌入在HTML中的资源(html,css,JavaScript,图片,音乐等),对于未知类型,会弹出对话框

10、浏览器发送异步请求

11、页面全部渲染结束。

一、HTTP报文

  1. 什么是HTTP报文:
    HTTP报文是HTTP协议在客户端和服务端之间传送的数据块。

  2. HTTP报文由哪些部分组成?
    一个HTTP请求报文由请求行(request line)、请求头部(header)、空行请求数据4个部分组成。

  3. HTTP报文分两类:
    请求报文(request message)当客户端向服务端发送请求时,就是发送请求报文
    HTTP请求报文

    响应报文(response message)当服务端向客户端返回数据时,就是返回响应报文。
    HTTP响应报文

  4. HTTP常见的请求方法
    1) GET
    传递参数长度受限制,因为传递的参数是直接表示在地址栏中,而特定浏览器和服务器对url的长度是有限制的。
    因此,GET不适合用来传递私密数据,也不适合拿来传递大量数据。
    一般的HTTP请求大多都是GET。
    2)POST
    POST把传递的数据封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,对数据量没有限制,也不会显示在URL中。
    表单的提交用的是POST。
    3)HEAD
    HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
    4)DELETE
    删除某一个资源。
    5)OPTIONS
    用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
    6)PUT
    把一个资源存放在指定的位置上。
    本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
    7)TRACE
    回显服务器收到的请求,主要用于测试或诊断。
    8)CONNECT
    CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

  5. 常见的HTTP相应状态码
    200:请求被正常处理
    204:请求被受理但没有资源可以返回
    206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
    301:永久性重定向
    302:临时重定向
    303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
    304:发送附带条件的请求时,条件不满足时返回,与重定向无关
    307:临时重定向,与302类似,只是强制要求使用POST方法
    400:请求报文语法有误,服务器无法识别
    401:请求需要认证
    403:请求的对应资源禁止被访问
    404:服务器无法找到对应资源
    500:服务器内部错误
    503:服务器正忙

二、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产生一个TCP数据包;POST产生两个TCP数据包。
  • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

三、Http与Https的区别:
HTTPS = HTTP + SSL

  1. HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
  4. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  5. HTTP 无法加密,而HTTPS 对传输的数据进行加密
  6. HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

四、cookies机制和session机制的区别:

  1. cookies数据保存在客户端。session数据保存在服务端
  2. cookies可以减轻服务器压力,但是不安全,容易进行cookies欺
  3. session安全一点,但是占用服务器资源。

五、TCP连接相关

  1. 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?
    默认情况下建立 TCP 连接不会断开,只有在请求报头中声明Connection: close 才会在请求完成后关闭连接。

  2. 一个 TCP 连接可以对应几个 HTTP 请求?
    如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。

  3. 一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)
    在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。

  4. 为什么有的时候刷新页面不需要重新建立 SSL 连接?
    TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。

  5. 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?
    有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

猜你喜欢

转载自blog.csdn.net/Dawnchen1/article/details/107643797