http基础知识,你真的都会了吗

451 阅读5分钟

http定义

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

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是在应用层,HTTP默认端口号为80

HTTP工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。
举例:

POST /user HTTP/1.1      //请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-agent: Mozilla/5.0.      //以上是首部行
(此处必须有一空行,通知服务器以下不再有请求头)  //空行分割header和请求内容 
name=world   请求体

图解

image

1.1 请求行

请求行由三部分组成:请求方法,请求URL(不包括域名),HTTP协议版本

1.1.1 请求方法

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的数据存放位置由服务器自己决定。

  关于POST和PUT的区别以及请求方法的幂等性,请参考文章:http的7种请求方法和幂等性

7)TRACE

  回显服务器收到的请求,主要用于测试或诊断。

8)CONNECT

  CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

1.1.2 HTTP协议版本 1)HTTP/1.0

  HTTP/1.0支持:GET、POST、HEAD三种HTTP请求方法。

2)HTTP/1.1

  HTTP/1.1是当前正在使用的版本。该版本默认采用持久连接,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。

  HTTP/1.1新增了:OPTIONS、PUT、DELETE、TRACE、CONNECT五种HTTP请求方法。   

1.2 请求头部

请求头部由关键字/值对组成,每行一对

  • User-Agent : 产生请求的浏览器类型
  • Accept : 客户端希望接受的数据类型,比如 Accept:text/xml(application/json)表示希望接受到的是xml(json)类型
  • Content-Type:发送端发送的实体数据的数据类型。 比如,Content-Type:text/html(application/json)表示发送的是html类型。
  • Host : 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

响应报文

HTTP响应报文和请求报文的结构差不多,也是由四个部分组成:

<status-line>   //状态行

<headers>   //消息报头

<blank line>   //空行

<response-body>    //响应体

状态码

  • 1XX:提示信息,表示服务器已经接收到浏览器的请求,继续处理
  • 2XX:处理成功,表示浏览器的请求已经成功被接收、并正确处理
  • 3XX:重定向,表示需要进行更进一步的处理
  • 4XX客户端请求错误,表示客户端请求出现错误
  • 5XX服务器端错误,服务器未能正确处理客户端请求

常见状态码解释:

  • 200 OK :表示客户端请求被成功接收,并将响应数据发送给客户端
  • 302 Found :重定向,新的URL会在Response中返回,浏览器将会自动向新的URL发送请求。
  • 304 Not Modified :表示信息已经被缓存了,还可以继续使用
  • 403 Forbidden :服务器接收到客户端请求,但拒绝为客户端提供服务
  • 404 Not Found :表示客户端请求的资源不存在(url输错了)
  • 500 Internet Server Error :服务器发生了不可预期的错误

HTTP报文结构和内容

image

拓展

跨域如何携带cookie

设置跨域的时候,默认不会携带cookie相关信息。如需要携带,cookie客户端配置 xhr.withCredentials = true,服务端 Access-Control-Allow-Credentials:true

什么是胖URL

胖URL:包含用户状态信息的URL被称为胖URL

缓存

下一篇着重讲缓存

必会:

  • http报文都有哪些内容?
  • HTTP协议头含有哪些重要的部分,HTTP状态码?
  • HTTP状态码状态码都有哪些?
  • 什么是强缓存?什么是弱缓存?
  • 浏览器的现缓存机制是什么?如何设置HTTP缓存?
  • 你知道有哪些HTTP方法?POST 和 PUT 有什么区别?
  • 如何对数据进行压缩(ZLIB),Gzip? 压缩的范围是什么,请求头会压缩吗?
  • 跨域,为什么JS会对跨域做出限制?如何允许跨域?

基础:

  • 影响网速的原因有哪些?
  • 网络丢包的主要原因是什么?
  • 网络体系结构的五层参考模型都是什么?它们之间的关系是什么?
  • 我们常听到报文、段(分组)、数据报、帧、和数据包,它们有什么关系?
  • Ajax能发送http请求,它和http有什么样的关系?
  • HTTP1.0 到 http1.1 解决了什么问题?
  • http2有什么特性?
  • http1.1为什么会有队首阻塞?SSL与TLS关系?HTTPS协议如何实现?

参考文档

www.cnblogs.com/myseries/p/… www.jianshu.com/p/e544b7a76…