HTTP协议笔记

笔记来源,超赞的原文链接https://www.jianshu.com/p/80e25cb1d81a

1.基本概念和交互模型

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
  • HTTP基于TCP/IP通信协议来传递数据
  • HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(Web服务器)发送请求。Web服务器根据接收到的请求向客户端发送响应信息HTTP协议笔记_第1张图片

2.HTTP请求消息Request

  • 客户端发送一个HTTP请求到服务器的请求消息由请求行,请求头部,空行,请求数据构成在这里插入图片描述
  • GET请求例子
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept  image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8

第一部分:第1行代码为请求行
第二部分:第2-6行代码为请求头部
第三部分:第7行代码为空行
第四部分:空行下的为请求数据,本例请求数据为空

  • POST请求例子
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

请求消息结构上一致,在应用过程中的一些不同下文会详细列举

3.HTTP响应消息Response

  • 服务器在接收并处理客户端请求后返回一个HTTP响应消息,该响应消息由状态行,消息报头,空行,响应正文四部分组成在这里插入图片描述
  • 例子
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

第一部分:第1行代码为状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成
第二部分:第2,3行代码为消息报头,Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:第4行代码为空行
第四部分:空行下的html代码为响应正文

4.HTTP响应消息之状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

常见状态码:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
304 //在客户端对请求内容有缓存情况下服务端的一种响应

5.HTTP请求消息之请求方法

  • HTTP1.0定义了三种请求方法: GET, POSTHEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。
GET      请求指定的页面信息,并返回实体主体。
HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT      从客户端向服务器传送的数据取代指定的文档的内容。
DELETE   请求服务器删除指定的页面。
CONNECT  HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS  允许客户端查看服务器的性能。
TRACE    回显服务器收到的请求,主要用于测试或诊断。

6.GET请求与POST请求的区别

  • GET和POST本质上并无区别,但是由于HTTP的规定和 浏览器/服务器 的限制导致他们在应用过程中体现出一些不同
  • 具体不同体现在下面几点

1.GET在浏览器回退或刷新时是无害的,而POST会再次提交请求。
2.GET产生的地址可以收藏,而POST不可以。
3.GET能被浏览器主动缓存,而POST不可以,除非手动设置。
4.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
5.GET请求在URL中传送的参数是有长度限制的,而POST没有限制。
6.GET对参数类型的限制只允许ASCII 字符,而POST没有限制。
7.GET的安全性较差,因为要请求的参数直接暴露在URL上,而POST不会
8.GET参数通过URL传递,POST放在Request body(请求数据)中。
9.GET产生一个TCP数据包;POST可能会产生两个TCP数据包即header和body分开发送。

7.HTTP的工作流程

1. 地址解析

2. 建立TCP连接

建立 TCP 连接 , 也就是常说的"三次握手" . 由于HTTP位于最上层的应用层 , 所以HTTP在工作之前要由 TCP 和 IP 协议建立网络连接。

为什么是三次握手?
第一次握手:客户端向服务端发包,这时服务端得出结论:客户端的发送能力和服务端的接收能力没有问题。
第二次握手:服务端向客户端返回包,客户端收到了,这时客户端得出结论:服务端的发送、接收能力没问题,客户端的发送、接收能力没问题。
第三次握手:客户端发包,服务端收到了,这时服务端得出结论:服务端和客户端的发送、接收能力没问题。在第一二次握手时,服务端并不知道客户端的接受能力和自己的发送能力有无问题,只有当第三次接收到客户端发送的包后,才能够得出双方都无问题的结论。
所以至少要经历上述三次握手之后,才能确认服务端、客户端双方都无问题,之后就可以开始正常通信了。

3. 发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行请求头部空行请求数据4部分组成。

4. 服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行响应头部空行响应数据4部分组成。

5. 浏览器解析HTTP响应

客户端解析响应,然后将响应数据中的HTML代码渲染给用户

6. 关闭连接

服务器端在发送完响应之后 , 就会关闭连接 , 如果过客户端的请求的头部信息中有 Connection-alive , 那么客户端在响应完这个请求之后不会关闭连接 , 直到客户端的所有请求都响应完毕 , 才会关闭连接。

7.HTTP信息头

Accept:浏览器能够处理的内容类型
Accept-Charset:浏览器能够显示的字符集
Accept-Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何Cookie
Host:发出请求页面所在的域
Referer:发出请求的页面的URI
User-Agent:浏览器的用户代理字符串

你可能感兴趣的:(前端学习,http)