美文网首页
HTTP详解

HTTP详解

作者: renyjenny | 来源:发表于2021-04-08 14:28 被阅读0次

HTTP协议,即超文本传输协议(HyperText Transfer Protocol),是基于TCP协议的应用层传输协议。

  • 无状态:对事务处理没有记忆能力。客户端发送请求、服务器解析请求、返回响应,这个过程是一个事务,每个事务都是独立的。服务器不会记录前后状态,如果后续请求需要前面请求的响应,则必须重传。一般使用cookie/session来记录状态。
  • 无连接:每次连接只处理一个请求。1.1版本可通过connection:Keep-Alive实现长连接。

Cookie与Session

cookie与session是为了解决http协议无状态的问题而设计的。
eg:登录场景。

  1. 用户登录,服务器创建一个属于当前用户的session,保存当前用户的信息,一般还会设置自动过期时间
  2. 服务器将session设置到cookie中,返回给客户端
  3. 客户端保存cookie,并在下次请求时将cookie放在请求头中传给服务器

cookie:在浏览器,保存服务器传来的信息,并在每次请求时自动附带上
session:在服务器端,用来保存用户的标志信息

HTTP请求报文

请求报文——从客户端向服务器发送请求报文
请求报文由请求行、请求头、请求体三部分组成。
使用fiddler可以查看完整的请求信息。

POST XXX/login HTTP/1.1
Host: 192.168.2.87:39081
Connection: keep-alive
Content-Length: 39
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
Content-Type: application/json;charset=UTF-8
Origin: http://192.168.2.87:39081
Referer: http://192.168.2.87:39081/login
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=4ecaf0fb2d7340449320124c569e57a7

{"username":"admin","password":"admin"}

请求行

请求行由请求方法、url、协议版本三部分组成。
方法表示对所请求对象进行的操作,HTTP协议支持的方法有:

方法 说明
GET 请求资源
POST 处理资源,一般用于提交表单或上传文件
PUT 传输文件
HEAD 获得响应头,不返回相应内容,可高效查看某个页面的状态
DELETE 删除资源
OPTIONS 询问服务器支持的方法
TRACE 回显服务器收到的请求,主要用于测试或诊断
CONNECT 让服务器代替客户端访问其他网页

GET和POST的区别

  1. GET用于请求数据,POST用于提交数据
  2. GET的参数会拼接在url中,POST的参数在请求体中
  3. GET传送的参数长度有限制,POST没有
  4. GET比POST更不安全,因为参数直接暴露在URL上
  5. GET请求只能进行url编码,POST支持多种编码方式

请求头

请求头由一系列键值对组成,主要是客户端发送一些附加信息或者客户端自身的信息
常用的请求头有:

请求头 说明
Referer 说明跳转地址,可用于防盗链
Accept 说明该请求能支持的相应数据类型
Content-Type 请求体对应的MIME信息

POST方法的content-type类型

  1. application/x-www-form-urlencoded
    默认表单提交方式,格式如:key1=val1&key2=val2,不支持二进制数据

  2. multipart/form-data
    与application/x-www-form-urlencoded类似,但支持文件传输

image.png
  1. application/json
    目前最常用。格式是{"key":"value"},请求体是序列化后的json字符串。

  2. text/plain
    用于传统ajax请求提交

请求正文

在发送POST请求时,会将参数放在请求正文里传送。

响应报文

响应报文由响应行、响应头、响应体组成。

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Wed, 24 Mar 2021 07:03:13 GMT
Content-Type: application/json;charset=UTF-8
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
Content-Length: 428

{"status":200,"message":"Request successful","data":{"pageNo":1,"pageSize":10,"startTime":null,"endTime":null}}

响应行

由协议/版本、状态码和描述组成。
常见状态码有:

状态码 说明
1XX 指示消息,服务器已接收了客户端请求,客户端可继续发送请求
2XX 成功,服务器已成功接收到请求并进行处理
3XX 重定向
4XX 客户端的请求有非法内容
404 not found请求资源不存在,如输入流错误的url
5XX 服务器端错误
500 服务器发生错误,如服务器报错
503 服务器不能处理客户端的请求,在一段时间后,服务器可能会恢复正常

响应头

通过响应头来控制浏览器行为。常见响应头有:

响应头 说明
Set-Cookie 服务器向浏览器写入cookie
Location 与状态码302配合使用完成跳转

响应体

服务器返回的具体内容

HTTP和HTTPS

HTTPS:基于HTTP协议,加入SSL进行加密,使HTTP的数据传输更加安全。

  • 内容加密:所有信息都是加密传播,中间者无法查看明文信息
  • 验证身份:通过证书来验证客户端与服务器是真实的
  • 数据保护:通过校验机制防止数据被篡改

相关文章

  • HTTP Header

    HTTP Header 详解HTTP Header解析 HTTP(HyperTextTransferProtoco...

  • HTTP

    HTTP 来源:博客 HTTP详解 HTTP协议详解 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、...

  • HTTP协议详解

    参考:HTTP协议详解

  • 状态码详解

    HTTP状态码详解

  • Golang面试之HTTP

    引用 HTTP协议详解 HTTP协议原理详解及应用 LwIP应用开发笔记之八:LwIP无操作系统HTTP客户端 U...

  • Java----使用nioSocket获取和返回http报文

    参考博客:HTTP协议(一)之HTTP协议详解 HTTP协议 HTTP(HyperText Transfer Pr...

  • Http

    HTTP 协议 HTTP 协议详解 超文本传输协议(HTTP,HyperText Transfer Protoco...

  • HTTP协议之状态码详解

    HTTP协议之状态码详解 Hypertext Transfer Protocol -- HTTP/1.1

  • iOS学习笔记之HTTP协议,iOS缓存和CoreData

    一.HTTP协议: 参考资料: HTTP协议详解:HTTP协议详解 超文本传送协议(百度百科):超文本传送协议百度...

  • 详解HTTP

    HTTP 网络协议分层 经典五层模型 物理层主要作用是定义物理设备如何传输数据(硬件设备相关——网卡端口、网线、光...

网友评论

      本文标题:HTTP详解

      本文链接:https://www.haomeiwen.com/subject/llojhltx.html