HTTP协议

先总结几点必须要记住的东西:

  1. 可靠
  2. 面向字节流的
  3. 超文本传输协议
  4. 无状态的
  5. 底层用的是TCP(传输层)协议,正常通信前要建立连接(三次握手)

好,记住了这些,让我们依次往下看:

1.认识URL

怎么看HTTP的Request请求和Response响应_数据
不仅有http,还有https,https对应的端口号是443

  • HTTP : 端口号:80 ,普通
  • HTTPS:端口号:443, 加密
    HTTP请求

1. HTTP协议格式解析

分为四个部分,我们以画图的形式呈现

HTTP请求
怎么看HTTP的Request请求和Response响应_服务器_02
举个例子,如下图是一个Request请求
怎么看HTTP的Request请求和Response响应_服务器_03

HTTP响应
怎么看HTTP的Request请求和Response响应_数据_04
举个例子,如下图是一个Response响应
怎么看HTTP的Request请求和Response响应_端口号_05

2. /r/n是什么意思?

大家都知道,通过网络传输,传输的都是bit位(由Byte字节转换),服务端接受到http request部分后,读出来的数据也是Byte流。服务端是怎样截取Byte流的,比如什么时候header结束,http body开始。

通过两个连续的字节13和10(也就是\r\n)。表示http header结束,http body开始

3.HTTP常见的Header

怎么看HTTP的Request请求和Response响应_服务器_06

4.HTTP方法

怎么看HTTP的Request请求和Response响应_端口号_07

  1. GET:

它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端

  1. POST:

向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。

  1. PUT:

PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定

  1. HEAD:

HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

  1. DELETE:

请求服务器删除Request-URL所标识的资源

  1. OPTIONS:

允许客户端查看服务器的性能。

  1. TERAC:

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

!!!GET与POST的区别?

  • GET在url传参,POST在正文传参
  • url的长度是有限制的,正文传参是没有限制的
  • GET在传参时,把数据暴露在外边,而POST不会把信息暴露在外边,POST比GET更私密。(举一个POST的例子:淘宝分享链接并没有把用户名和密码暴露在外边。)

5.HTTP的状态码

怎么看HTTP的Request请求和Response响应_客户端_08
最常见的状态码,比如:
200(ok)
404(Not Found)客户端错误,向服务器提出无理要求
403(Forbidden)
302(Rediret,重定向)
504(Bad Gateway)