• http请求


    http请求过程

     

    1. 浏览器端向服务器发送HTTP请求(请求报文)

    2. 后台服务器接收到请求后,处理请求, 向浏览器端返回HTTP响应(响应报文)

    3. 浏览器端接收到响应, 解析显示响应体或调用回调函数

    HTTP请求报文

    1. 1.  请求行:

    格式:method url

    例如:GET /product_detail?id=2   或  POST /login

    1. 2.   请求头(一般有多个请求头)

    Host: www.baidu.com

    Cookie: BAIDUID=AD3B0FA706E; BIDUPSID=AD3B0FA706;

    Content-Type: application/x-www-form-urlencoded 或者 application/json

    1. 3.   请求体

    username=tom&pwd=123

    {"username": "tom", "pwd": 123}

    HTTP响应报文

    1. 1.   响应行: 

    格式:status statusText

    例如:200 OK  或  404 Not Found

    1. 2.   响应头(一般有多个)

    Content-Type: text/html;charset=utf-8

    Set-Cookie: BD_CK_SAM=1;path=/

    1. 3.   响应体

    html/json/js/css/图片...

    HTTP状态码及其含义

    1XX:信息状态码

    100:Continue 继续,⼀般在发送 post 请求时,已发送了 http header 之后服务端将返回此信息,表示确认,之后发送具体参数信息


    2XX:成功状态码

    200:OK 正常返回信息
    201:Created 请求成功并且服务器创建了新的资源
    202:Accepted 服务器已接受请求,但尚未处理


    3XX:重定向

    301:Moved Permanently 请求的⽹⻚已永久移动到新位置。
    302:Found 临时性重定向。
    303:See Other 临时性重定向,且总是使⽤ GET 请求新的 URI 。
    304:Not Modified ⾃从上次请求后,请求的⽹⻚未修改过。


    4XX:客户端错误

    400:Bad Request 服务器⽆法理解请求的格式,客户端不应当尝试再次使⽤相同的内容发起请求。
    401:Unauthorized 请求未授权。
    403:Forbidden 禁⽌访问。
    404:Not Found 找不到如何与 URI 相匹配的资源。


    5XX:服务器错误

    500:Internal Server Error 最常⻅的服务器端错误。
    503:Service Unavailable 服务器端暂时⽆法处理请求(可能是过载或维护)。

    http请求方法

     八大请求

    GET

    请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据。 

    参数:query参数(urlencoded)/paramas参数

    无请求体;

    有响应体;安全;Idempotent;可缓存;允许在HTML表单中使用。

    GET可以说是最常见的了,它本质就是发送⼀个请求来取得服务器上的某⼀资源。资源通过⼀组HTTP头和呈现数据(如HTML⽂本,或者图⽚或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

    HEAD

    请求一个与GET请求的响应相同的响应,但没有响应体。

    HEAD和GET本质是⼀样的,区别在于HEAD不含有呈现数据,⽽仅仅是HTTP头信息。有⼈可能觉得这个⽅法没什么⽤,其实不是这样的。想象⼀个业务情景:欲判断某个资源是否存在,我们通常使⽤GET,但这⾥⽤HEAD则意义更加明确

    POST

    将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。

    参数:请求体参数:query参数(urlencoded)/paramas参数,JSON参数

    请求主体的类型由 Content-Type 首部指定.

    application/x-www-form-urlencoded: 数据被编码成以 '&' 分隔的键-值对, 同时以 '=' 分隔键和值. 非字母或数字的字符会被 percent-encoding: 这也就是为什么这种类型不支持二进制数据(应使用 multipart/form-data 代替).
    multipart/form-data
    text/plain

    PUT 和POST方法的区别是,PUT方法是幂等的:连续调用一次或者多次的效果相同(无副作用)。连续调用同一个POST可能会带来额外的影响,比如多次提交订单。

    PUT

    请求有效载荷替换目标资源的所有当前表示,可以简单理解为更新数据的请求。

    这个⽅法⽐较少见。HTML表单也不⽀持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有⼀个重要区别,PUT通常指定了资源的存放位置,⽽POST则没有,POST的数据存放位置由服务器⾃⼰决定。举个例⼦:如⼀个⽤于提交博⽂的URL,/addBlog。如果⽤PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博⽂的地址。⽽如果⽤POST,则这个地址会在提交后由服务器告知客户端。⽬前⼤部分博客都是这样的。显然,PUT和POST⽤途是不⼀样的。具体⽤哪个还取决于当前的业务场景。

    DELETE

    删除指定的资源。

    基本上这个也很少见,不过还是有⼀些地⽅⽐如amazon的S3云服务⾥⾯就⽤的这个⽅法来删除资源。

    CONNECT  建立一个到由目标资源标识的服务器的隧道。
    OPTIONS

    描述目标资源的通信选项。俗称:“嗅探请求”

    这个⽅法很有趣,但极少使⽤。它⽤于获取当前URL所⽀持的⽅法。若请求成功,则它会在HTTP头中包含⼀个名为“Allow”的头,值是所⽀持的⽅法,如“GET, POST”。

    TRACE  沿着到目标资源的路径执行一个消息环回测试。

    请求参数

    1. query参数(查询字符串参数)

    1. 参数包含在请求地址中,格式为:/xxxx?name=tom&age=18

    2. 敏感数据不要用query参数,因为参数是地址的一部分,比较危险。

    3. 备注:query参数又称查询字符串参数,编码方式为urlencoded

    2.params参数

    1.参数包含在请求地址中,格式如下:

    http://localhost:3000/add_person /tom/18

    2.敏感数据不要用params参数,因为参数是地址的一部分,比较危险。

    3. 请求体参数

    1.参数包含在请求体中,可通过浏览器开发工具查看

    2.常用的两种格式:

    格式一:urlencoded格式

    例如:name=tom&age=18

    对应请求头:Content-Type: application/x-www-form-urlencoded

    格式二:json格式

    例如: {"name": "tom", "age": 12}

    对应请求头:Content-Type: application/json

    特别注意:

    1. GET请求不能携带请求体参数,因为GET请求没有请求体。

    2. 理论上一次请求可以随意使用上述3种类型参数中的任何一种,甚至一次请求的3个参数可以用3种形式携带,但一般不这样做。

    3. 一般来说我们有一些“约定俗成”的规矩:

      1. 例如form表单发送post请求时: 自动使用请求体参数,用urlencoded编码。

      2. 例如jQuery发送ajax-post请求时:自动使用请求体参数,用urlencoded编码。

    4. 开发中请求到底发给谁?用什么请求方式?携带什么参数?----要参考项目的API接口文档。

    简单请求和非简单请求

    Ajax请求和非Ajax请求

    1、Ajax请求有两种:XMLHttpRequest类型和fetch类型

    2、非Ajax请求

    Ajax请求

    1. ajax请求是一种特别的http请求

    2. 对服务器端来说, 没有任何区别, 区别在浏览器端

    3. 浏览器端发请求: 只有XHR或fetch发出的才是ajax请求, 其它所有的都是非ajax请求

    4. 浏览器端接收到响应

    (1)   一般请求: 浏览器一般会直接显示响应体数据, 也就是我们常说的自动刷新/跳转页面

    (2)   ajax请求: 浏览器不会对界面进行任何更新操作, 只是调用监视的回调函数并传入响应相关数据

    XMLHttpRequest  
    window.fetch()

    fetch()是原生基于promise的异步请求方法,比XMLHttpRequest更简洁。

    第一个必填参数是URL,option可选填,比较常用的配置项有:

    method - 支持 GET, POST, PUT, DELETE, HEAD

    url - 请求的 URL

    headers - 对应的 Headers 对象

    body - 请求参数(JSON.stringify 过的字符串或’name=jim\u0026age=22’ 格式)

     

    Response响应

    fetch方法的then会接收一个Response实例,值得注意的是fetch方法的第二个then接收的才是后台传过来的真正的数据,一般第一个then对数据进行处理等。

      非Ajax请求:Ajax请求之外的都属于一般http请求
  • 相关阅读:
    16.什么是面向对象编程?
    15.运动
    14.this指向和ES6常用内容
    13.正则表达式
    12.事件模型
    11.event事件对象
    10.BOM
    9.DOM
    拓扑排序学习(复习)笔记
    [Luogu] P1987 摇钱树
  • 原文地址:https://www.cnblogs.com/shangsi/p/16256668.html
Copyright © 2020-2023  润新知