HTTP通信基础---HTTP协议数据结构分析

 

HTTP协议(超文本传输协议):

  http请求由三部分组成,分别是:请求行、消息报头、请求正文

  http是一个简单的请求-响应模式、无状态的应用层协议,它通常运行在TCP之上。基于C/S架构进行通信;它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。

工作原理(源于百度百科):

  HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

  1.客户端与服务端建立连接

  2.客户端向服务端发送请求

  3.服务端接受客户端请求,并根据请求给出相应的文件作为响应

  4.客户端与服务端关闭连接

常见的HTTP请求方法:

  GET: 用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器。
  POST:用于传输信息给服务器,主要功能与GET方法类似,把传递的数据封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,对数据量没有限制,也不会显示在URL中。
  PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
  HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  OPTIONS:用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

GET与POST的区别:

  1.   get是从服务器上获取资源,post是向服务端发送数据
  2.   Get传输数据是通过URL请求,可以在URL中看到请求参数数据;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
  3.   Get因为受URL长度影响,所以传输数据量小,但是效率高,post可以传输大量数据
  4.   Get的参数在URL是可见的,可能会泄露数据,所以相较于post是很不安全的,post的安全性较高  
  5.   Get只能传ASCII字符,不能传中文,post支持标准的字符集,可以传递中文

HTTP请求报文与响应报文:

  http request(请求报文)包含:

    请求地址:url

    请求方法:get、post

     http协议/版本:可以打开浏览器按F12查看

    请求头:请求头详解参考https://jingyan.baidu.com/article/375c8e19770f0e25f2a22900.html

    

    请求正文:也就是请求参数

    思考:请求头中的参数是每次请求必带的吗

  http response(响应报文)包含:

    状态码:200 302 304 403 404 500 504 502

    响应头:

    

 

    响应正文:针对请求从服务响应回来的数据,比如html,xml,json等。

http 常见状态码:

  200(正常):请求成功(其后是对GET和POST请求的应答文档。)

  302(页面重定向):所请求的页面已经临时转移至新的url。

  304(未修改):未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

  403(禁止):对被请求页面的访问被禁止。没有权限。

  404(NOT FOUND):服务器无法找到被请求的页面。

  500(网络错误):请求未完成。服务器遇到不可预知的情况。

  504(超时):网关超时。

  502(Bad Gateway):请求未完成。服务器从上游服务器收到一个无效的响应。

http 请求头信息:

  Accept:浏览器支持的MIME类型,MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 */*,优先顺序是它们从左到右的排列顺序。
  Accept-Charset::浏览器支持的编码类型
  Accept-Encoding: 浏览器有能力解码的编码类型
  Accept-Language: 浏览器支持的语言类型
  Host:请求的服务器网址
  If-Modified-Since:客户机通过这个头,告诉服务器,数据缓存的时间
  Referer:客户机通过这个头,告诉服务器,客户机是从哪个页面来的(防盗链)
  User-Agent: 使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
  Cookie:客户机通过这个头,可以带点数据给服务器
  Connection:Keep-Alive(持久连接),表示客户端与服务连接类型
  Content-Length:表示请求消息正文的长度。

http 响应头信息:

  Allow:服务器支持哪些请求方法(如GET、POST等)。
  Date:时间,一般是服务器当前时间
  Content-Encoding:返回正文的压缩编码类型
  Content-Length:返回正文的长度
  Content-Type:返回正文的类型,编码等信息
  Cache-Control:缓存机制以及策略,时间,方式等
  Etag:返回文件信息的特征码
  Expires:返回文件信息的缓存有限期
  Set-Cookie:设置和页面关联的Cookie。
  Location:表示客户应当到哪里去提取文档,自动重定向到其他新的地址,一般状态301,302时会出现
  Connection:控制长短链接,告诉对方当前链接状态,默认Keep,当双方都为Keep时则链接会在下次沿用

  server:向客户端标明服务器程序名称和版本

扩展:

如何使用fiddler抓包分析

详细解读http请求头

python正则表达式search()与match()的区别

posted @ 2020-06-18 14:31  木子的学习笔记  阅读(774)  评论(0编辑  收藏  举报