美文网首页
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详解

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