Http是什么

描述

Http是什么?

基本概念

  • **HTTP是超文本传输协议(HyperText Transfer Protocol)的简称,它建立在C/S架构的应用层协议。

    **

  • **HTTP、FTP、Telnet等协议都是建立在TCP/IP协议基础上的,而TCP/IP协议是协议层的内容,它定义了计算机间通信的基础协议。

    **

  • **在HTTP协议中,客户端负责发起一个Request,该Request中含有请求方法、URL、协议版本等信息,服务端在接受到该Request后会返回一个Response,该Response中含有状态码、响应内容等信息,这一模型称为请求/响应模型。

    **

  • HTTP协议通信的核心是HTTP报文,我们将其分为请求报文和响应报文。其中,由客户端发出的HTTP报文称为请求报文,由服务端发出的报文称为响应报文.

请求报文:请求报文通常由浏览器来发起,当我们访问一个网页或者请求一个资源的时候都会产生请求报文

  • 请求报文通常由HTTP请求行、请求头、消息体(可选)三部分组成
// 基本请求信息
Request URL: https://www.baidu.com 
Request Method: GET      
Status Code: 200 OK    
Remote Address: 111.206.209.78:443
Referrer Policy: unsafe-url


//请求头
Accept: application/json, text/javascript, q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: BIDUPSID=344D077FD6A3F97616DBD66A24EBDC96
Host: zhidao.baidu.com
Pragma: no-cache
Referer: https://zhidao.baidu.com/question/366757430246244692.html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
X-ik-ssl: 1
X-Requested-With: XMLHttpRequest


//请求参数
...

请求参数解析

  • **Host: 请求目标的网站

    **

  • **Connection: 默认为“keep-Alive“,默认支持长连接

    **

  • **Cache-Control:这玩意跟缓存有关,其中no-cache表示无缓存

    **

  • **User-Agent:告诉serve 这个client的身份,一般由浏览器决定,比如:浏览器类型,版本等等

    **

  • **Accept:以及后面的Accept打头的都是表明client能够接收的种类和类型

    **

  • Cookie:一般会将登录的一些信息放在cookie中

响应报文:响应报文是指在服务端接收并处理了客户端的请求信息以后,服务端发送给客户端的HTTP报文

// 响应状态 ,200 表示成功
HTTP/1.1 200 OK


/* 响应头部 */
Access-Control-Allow-Headers: X-ik-ssl,X-ik-token,X-ik-utdata,X-ik-appid,X-ik-cuid,X-ik-fc,X-swan-version,X-ik-tries,X-fail,X-ik-appversion,X-ik-appname,Content-Type,SWAN_UPGRADE_CHECK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 21
Content-Type: text/html
Date: Fri, 23 Dec 2022 11:49:43 GMT
Not-Try: 0
Server: Apache
Vary: Accept-Encoding
Wait: 2


/* 响应信息 */
...

响应参数解析

  • **Http/1.1 200 OK:200表示返回的状态码是正常,OK则是描述性的状态码

    **

  • **Date:表示服务器响应的时间

    **

  • **Server: 响应客户端的服务器。

    **

  • **Content-Length:表示服务器返回给客户端正文的字节流长度

    **

  • **Content-Type:表示正文的类型

    **

  • Content-Encoding:文档类型的编码方式,服务器端采用gzip的形式进行了文档压缩

Http的基本应用

常见的方法有GET、POST 两种http请求方式

  • **GET:最为常见的一种请示方式。当客户端从服务器读取文档或者通过一个链接来访问页面的时候,都是采用GET方式来请求的

    **

  • **POST:POST克服了GET方式对参数长度存在限制的缺点,以键-值形式将参数封装在HTTP请求中,所以从理论上讲它对参数长度没有限制,但是实际上各个服务器会规定对POST提交数据大小进行限制;

    **

  • 注: POST的安全性比GET的高,因对用户来讲参数传递过程是不可见的。 类似用户登录之类的基本都是采用post形式

HTTP中的五种响应码

  • 1xx:指示信息--表示请求已接收,继续处理
  • 2xx:成功--表示请求已被成功接收、理解、接受
  • 3xx:重定向--要完成请求必须进行更进一步的操作
  • 4xx:客户端错误--请求有语法错误或请求无法实现
  • 5xx:服务器端错误--服务器未能实现合法的请求

!传输协议

编辑

HttpWebRequest 简单的HTTP请求案例

GET方式:

public static string doGet()
{
    string url="www.baidu.com";
  //创建
  HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
  //设置请求方法
  httpWebRequest.Method = "GET";
  //请求超时时间
  httpWebRequest.Timeout = 30000;
  //发送请求
  HttpWebResponse response=null;
  Stream s = null;
  StreamReader sRead = null;
  string postContent = null;
  try
  {
    //获得响应流
    response = (HttpWebResponse)httpWebRequest.GetResponse();
    s = response.GetResponseStream();
    sRead = new StreamReader(s);
    postContent = sRead.ReadToEnd();
  }
  catch (WebException ex)
  {
    response = ex.Response as HttpWebResponse;
    log.Error(ex.Message.ToString(), ex);
  }
  finally
  {
    if(sRead != null)
    {
      sRead.Close(); 
    }
    if(s != null)
    {
      s.Close();
    }
    if(response != null)
    {
      response.Close();
    }
  }
  return postContent;//返回Json数据
}

POST方式:

public static string doPost()
{
  string strURL = "wwww.baidu.com";
  //创建一个HTTP请求  
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
  //Post请求方式  
  request.Method = "POST";
  //内容类型
  request.ContentType = "application/json";
  request.Accept = "application/json";
  //将Json字符串转化为字节  
  byte[] payload = System.Text.Encoding.UTF8.GetBytes(jsonParas);
  //设置请求的ContentLength   
  request.ContentLength = payload.Length;
  //发送请求,获得请求流 
  Stream writer;
  try
  {
    writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  }
  catch (Exception ex)
  {
    log.Error("连接服务器失败!" + ex.Message.ToString(), ex);
    throw ex;
  }
  //将请求参数写入流
  writer.Write(payload, 0, payload.Length);
  writer.Close();//关闭请求流
  HttpWebResponse response = null;
  Stream s = null;
  StreamReader sRead = null;
  string postContent = null;
  try
  {
    //获得响应流
    response = (HttpWebResponse)request.GetResponse();
    s = response.GetResponseStream();
    sRead = new StreamReader(s);
    postContent = sRead.ReadToEnd();
  }
  catch (WebException ex)
  {
    response = ex.Response as HttpWebResponse;
    log.Error(ex.Message.ToString(), ex);
  }
  finally
  {
    if (sRead != null)
    {
      sRead.Close();
    }
    if (s != null)
    {
      s.Close();
    }
    if (response != null)
    {
      response.Close();
    }
  }
  return postContent;//返回Json数据
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分