文章目录  1. HTTP(超文本传输协议)请求具有以下主要特征: 1.1 请求行(Request Line): 1.2 请求头(Request Headers): 1.3 请求正文(Request Body): 1.4 状态码(Status Code): 1.5 无状态性(Statelessness): 1.6 缓存支持(Cacheability): 1.7 方法多样性(Method Diversity): 1.8 URI定位(Uniform Resource Identifier):   2. 在JavaScript中,可以使用XMLHttpRequest对象或者fetch API来发送HTTP 请求 2.1 使用XMLHttpRequest 2.2 使用fetch API     
  
 
 1. HTTP(超文本传输协议)请求具有以下主要特征:  
 1.1 请求行(Request Line):  
方法(Method): 指定请求的类型,如GET、POST、PUT、DELETE等,表示对资源的操作方式。 URL(Uniform Resource Locator): 请求资源的统一资源定位符,标识了要访问的网络资源。 协议版本(Protocol Version): 表明使用的HTTP协议版本,如HTTP/1.1、HTTP/2等。   
1.2 请求头(Request Headers):  
包含一系列键值对,提供了关于请求的元信息,如客户端信息、内容类型、接受的语言、认证信息等。 例如:Accept-Language: zh-CN,zh;q=0.9 表示客户端优先接受中文内容。   
 1.3 请求正文(Request Body):  
部分请求方法(如POST、PUT)可能携带请求正文,包含发送给服务器的数据。 正文内容根据请求头中的Content-Type决定格式,可以是表单数据、JSON、XML等。   
 1.4 状态码(Status Code):  
虽然状态码是响应的一部分,但它是HTTP交互的重要特征,指示请求的处理结果。 如200 表示成功,404 表示未找到**,500**表示服务器内部错误等。   
 1.5 无状态性(Statelessness):  
HTTP 协议本身是无状态的,意味着每个请求都是独立的,服务器不保存关于客户端的上下文信息。这一特性通过Cookie 和Session 等机制来实现用户会话管理。   
 1.6 缓存支持(Cacheability):  
HTTP支持通过特定的头部字段(如Cache-Control, Expires)来控制响应是否可被缓存,以提高效率。   
 1.7 方法多样性(Method Diversity):  
提供多种请求方法,每种方法对应不同的操作意图,满足不同场景下的需求。   
 1.8 URI定位(Uniform Resource Identifier):  
使用URI定位网络资源,使得Web上的每一个资源都可以被唯一标识和请求。   
 2. 在JavaScript中,可以使用XMLHttpRequest对象或者fetch API来发送HTTP 请求  
 2.1 使用XMLHttpRequest  
var  xhr =  new  XMLHttpRequest ( ) ; 
xhr. open ( 'POST' ,  'https://api.example.com/data' ,  true ) ; 
xhr. setRequestHeader ( 'Content-Type' ,  'application/json;charset=UTF-8' ) ; 
xhr. onreadystatechange  =  function  ( )  { if  ( xhr. readyState ===  4  &&  xhr. status ===  200 )  { console. log ( xhr. responseText) ; } 
} ; 
var  data =  JSON . stringify ( {  key :  'value'  } ) ; 
xhr. send ( data) ; 
  
 2.2 使用fetch API  
fetch ( 'https://api.example.com/data' ,  { method :  'POST' , headers :  { 'Content-Type' :  'application/json' } , body :  JSON . stringify ( {  key :  'value'  } )  
} ) 
. then ( response  =>  { if  ( response. ok)  { return  response. json ( ) ;  }  else  { throw  new  Error ( 'Network response was not ok.' ) ;  } 
} ) 
. then ( data  =>  console. log ( data) ) 
. catch ( error  =>  console. error ( 'Error:' ,  error) ) ;