开发之前应该了解的HTTP

时间:2021-03-28 05:04:10
HTTP简介
  • HTTP是网络上传输的协议,用于浏览器和服务器的通信。
  • 基于TCP/IP通信协议来传递数据
  • 属于应用层(七层协议:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)
  • 在客户端-服务端架构上工作。

特点
  1. 简单快速
  2. 灵活
  3. 无连接(无连接的含义是每次只处理一个请求,处理完成断开连接。)
  4. 无状态(无状态协议,后续操作需要前面的信息,数据必须重传。)
  5. 支持服务器/客户  模式
主要要记住和了解的是无连接和无状态。

消息分类
    HTTP消息也称为报文,分为请求消息和响应消息两种基本分类。(request和response)
    相当于客户端与服务器端的一应一答,一个响应对应一个请求。
    为了更好的理解消息request,可以用抓包工具Charles去抓取request数据。


request
  1. 请求行
  2. 请求头部
  3. 空行(必须)
  4. 请求数据总体

response
  1. 状态行
  2. 消息报头
  3. 空行(必须)
  4. 响应正文
状态码
  • 200 请求成功
  • 400 客户端语法错误,不能被服务器端所理解
  • 403 服务器端收到请求,连接没问题,但是拒绝提供服务。
  • 404 请求资源不存在(一般是输入了错误的URL)
  • 500 服务器出错
  • 503 服务器当前处理不了,一段时间后才能继续处理。


HTTP工作原理
  1. 连接服务器
  2. 发送HTTP请求(request)
  3. 服务器接受请求(response)
  4. TCP连接
  5. 浏览器解析内容

在实际开发中,需要理解更多的是主要请求的两种方式的区别。(get请求和post请求)
最基本方法是GET,POST,PUT,DELETE(对应的分别是查,改,增,删)
get和post一句话描述是,get用来获取和查询信息,post大多是更新。
get是向服务器发索取数据的一种请求,post是向服务器提交数据的一种请求。

get请求
  • GET /books/?sex=man&name=Professional HTTP/1.1
    Host: www.baidu.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Connection: Keep-Alive
    ----
post请求
  • POST / HTTP/1.1
    Host: www.baidu.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 40
    Connection: Keep-Alive
    -----
    name=Professional%20Ajax&publisher=Wiley
注:----代表的的是空行,这个空行是不可以省去的。

  1. HTTP规范中,get用于信息的获取,而且应该是安全的和幂等的。(PS:幂等是指在编程中某操作任意多次执行所产生的影响均与一次执行的影响相同。)在这里面操作的安全性是指该操作用于获取信息而非修改信息,就是get一般不产生副作用,只获取不修改。
  2. HTTP规范中,post表示可能修改服务器上的资源请求。这一点跟get就不太一样


二者的主要区别在于:
  1. get请求的数据会附在URL之后,post把提交的数据放在HTTP包的包体中。(这样决定的是,表单form必须要使用post。像登陆表单这样的)
  2. get提交的数据是有内存限制的(1024字节),而post理论上没有。
  3. post安全性要比get高
  4. get能被缓存,post不能。(这也是从另外一方面说了post要更安全)

二者的本质都是TCP链接,并没有什么差别。(get产生一个TCP数据包,POST产生两个数据包。)



HTTP是使用统一资源标识符(URI/URL)来传输数据和建立连接
  • 协议(http)
  • 域名(www.baidu.com)
  • 端口号(:8080)
  • 虚拟文件目录
  • 文件名
  • 参数


以上都是个人总结出来的,肯定也有不对的地方,欢迎交流指点,互相学习。