应用层(二)——HTTP协议

应用层(二)

HTTP协议

HTTP请求报文

在这里插入图片描述

HTTP请求报文分为 请求行,请求头,请求体:

请求行:
  • 格式:请求方式 资源路径 协议/版本
  • 例如:POST /chapter17/user.html HTTP/1.1
  • 请求方式:
  1. get请求:将请求参数追加在url后面,不安全
    url长度限制get请求方式数据的大小
    没有请求体
  2. post请求:
    请求参数在请求体处,较安全。
    请求数据大小没有限制
  3. head请求:
    跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。
    所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
  4. delete请求:
    删除某一个资源。
  5. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
  6. PUT:向指定资源位置上传其最新内容。
  7. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  8. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  9. PATCH:PATCH方法出现的较晚,它在2010年的RFC-5789标准中被定义。PATCH请求与PUT请求类似,同样用于资源的更新。二者有以下两点不同:
    PATCH一般用于资源的部分更新,而PUT一般用于资源的整体更新。
    当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已在资源进行更新。
请求头:
Header解释示例
Accept指定客户端能够接收的内容类型text/plain, text/html
Accept-Charset浏览器可以接受的字符编码集iso-8859-5
Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型。compress, gzip
Accept-Language浏览器可接受的语言en,zh
Accept-Ranges可以请求网页实体的一个或者多个子范围字段bytes
Cache-Control指定请求和响应遵循的缓存机制no-cache
Connection表示是否需要持久连接。(HTTP 1.1默认进行持久连接)close
Content-Length请求的内容长度348
Content-Type请求的与实体对应的MIME信息application/x-www-form-urlencoded
Date请求发送的日期和时间Tue, 15 Nov 2010 08:12:31 GMT
Host指定请求的服务器的域名和端口号www.zcmhi.com
If-Modified-Since如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码(条件请求)Sat, 29 Oct 2010 19:43:31 GMT
Pragma用来包含实现特定的指令(缓存相关)no-cache
Range只请求实体的一部分,指定范围(断点传输)bytes=500-999
Referer先前网页的地址(防盗链)http://www.zcmhi.com/archives/71.html
User-Agent发出请求的用户信息Mozilla/5.0 (Linux; X11)
CookieHTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。$Version=1; Skin=new;
请求体

当请求方式是post的时,请求体会有请求的参数,格式如下:username=zhangsan&password=123

HTTP响应报文

HTTP的响应报文:响应行,响应头,响应体
在这里插入图片描述

响应行:
  • 格式:报文协议+状态码

  • 状态码:
    1xx:指示信息,表示请求已接收,继续处理

    2xx:成功,表示请求已被成功接受,处理。

    • 200 OK:客户端请求成功
    • 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
    • 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容

    3xx:重定向

    • 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。

    • 302 Found:临时重定向,表示请求的资源临时搬到了其他位置

    • 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问

    • 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET

    • 304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有

      4xx:客户端错误

      • 400 Bad Request:客户端请求有语法错误,服务器无法理解。
      • 401 Unauthorized:客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。
      • 403 Forbidden:资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
      • 404 Not Found:请求资源不存在。比如,输入了错误的url
      • 415 Unsupported media type:不支持的媒体类型

      5xx:服务器端错误,服务器未能实现合法的请求。

      • 500 Internal Server Error:服务器发生不可预期的错误。
      • 501 Not Implemented:服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。
      • 502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
      • 503 Server Unavailable:务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。
      • 504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)
      • 505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)
        ————————————————
        版权声明:本文为CSDN博主「有抱负的小狮子」的原创文章,原文链接:https://blog.csdn.net/weixin_38087538/article/details/82838762
响应头:
Header解释示例
Accept-Ranges表明服务器是否支持指定范围请求及哪种类型的分段请求bytes
Cache-Control告诉所有的缓存机制是否可以缓存及哪种类型no-cache
Content-Location请求资源可替代的备用的另一地址/index.htm
Content-Range在整个返回体中本部分的字节位置bytes 21010-47021/47022
Expires响应过期的日期和时间Thu, 01 Dec 2010 16:00:00 GMT
Location用来重定向接收方到非请求URL的位置来完成请求或标识新的资源http://www.zcmhi.com/archives/94.html
refresh应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)5; url=http://www.zcmhi.com/archives/94.html
Set-Cookie设置Http CookieUserID=JohnDoe; Max-Age=3600; Version=1
Content-Disposition通过浏览器以下载方式解析正文取值attachment;filename=xx.zip
Serverweb服务器软件名称Apache/1.3.27 (Unix) (Red-Hat/Linux)

更多请求头属性可以参考这篇文章:http://tools.jb51.net/table/http_header

Content-Type详解

在这里插入图片描述

application/x-www-form-urlencoded

最常见的post提交数据的方式。浏览器原生的form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded 方式提交数据
提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。

很多时候,我们用 Ajax 提交数据时,也是使用这种方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默认「application/x-www-form-urlencoded;charset=utf-8」。

multipart/form-data

使用表单上传文件时,必须让 form 的 enctyped 等于这个值。


POST http://39.108.107.149:8080/vk/app/rest/ddp/iDataSourcesBaseService/file HTTP/1.1
Content-Type: multipart/form-data; boundary=--------------------------629236571647111133881449
cache-control: no-cache
Postman-Token: 2146b4b3-2d30-469c-bbcd-fbc4693934d9
User-Agent: PostmanRuntime/7.1.1
Accept: */*
Host: 39.108.107.149:8080
cookie: JSESSIONID=6CD80B7028062D9190717CEE001C3194
accept-encoding: gzip, deflate
content-length: 435
Connection: keep-alive
 
----------------------------629236571647111133881449
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
 
test upload
----------------------------629236571647111133881449
Content-Disposition: form-data; name="extCode"
 
test
----------------------------629236571647111133881449
Content-Disposition: form-data; name="extId"
 
3306

----------------------------629236571647111133881449--  //结束标识
————————————————

首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary 是什么内容。

消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是最后是字段具体内容(文本或二进制),如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。

上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段原生 form 表单也只支持这两种方式。但是随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。
————————————————

application/json

用来告诉服务端消息主体是序列化后的 JSON 字符串


POST http://39.108.107.149:8080/vk/app/rest/ddp/vkIndexsService/queryVkIndxs HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 5014bc39-0777-49d5-bb8a-73db9a981e49
User-Agent: PostmanRuntime/7.1.1
Accept: */*
Host: 39.108.107.149:8080
cookie: JSESSIONID=6CD80B7028062D9190717CEE001C3194
accept-encoding: gzip, deflate
content-length: 132
Connection: keep-alive
 
{
    "name":"828验证继承",
    "getresultType":"2",
    "createTime":"Tue Sep 11 2018 00:00:00 GMT+0800 (中国标准时间)"
}
这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好

 
————————————————

text/xml

版权声明:本文为CSDN博主「有抱负的小狮子」的原创文章
原文链接:https://blog.csdn.net/weixin_38087538/article/details/82838762

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值