HTTP详解

2021-04-08  本文已影响0人  renyjenny

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

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的数据传输更加安全。

上一篇下一篇

猜你喜欢

热点阅读