Ruby on Rails 5.2 - ActionDispatch::Request

वर्ग ActionDispatch :: अनुरोध




ruby

वर्ग ActionDispatch :: अनुरोध

जनक:
Object
शामिल मॉड्यूल:
ActionDispatch::Http::Cache::Request , ActionDispatch::Http::MimeNegotiation , ActionDispatch::Http::Parameters , ActionDispatch::Http::FilterParameters , ActionDispatch::Http::URL , ActionDispatch :: ContentSecurityPolicy :: अनुरोध

स्थिरांक

ENV_METHODS
HTTP_METHODS
HTTP_METHOD_LOOKUP
स्थानीय होस्ट
RFC2518
RFC2616

निम्न RFC से HTTP अनुरोध विधियों की सूची: हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल - HTTP / 1.1 ( www.ietf.org/rfc/rfc2616.txt ) HTTP www.ietf.org/rfc/rfc2616.txt डिस्ट्रीब्यूटेड ऑथरिंग के लिए - WEBDAV ( www.ietf.org/rfc/rfc2518.txt ) WebDAV ( www.ietf.org/rfc/rfc3253.txt ) www.ietf.org/rfc/rfc3253.txt कलेक्शंस प्रोटोकॉल (WebDAV) ( www.ietf.org/rfc/rfc3648.txt ) वेब डिस्ट्रिब्यूटेड ऑथरिंग एंड www.ietf.org/rfc/rfc3648.txt (WebDAV) एक्सेस कंट्रोल प्रोटोकॉल ( www.ietf.org/rfc/rfc3744.txt ) वेब वितरित संलेखन और संस्करण (WebDAV) SEARCH ( www.ietf.org/rfc/rfc5323.txt ) कैलेंडर एक्सटेंशन WebDAV ( www.ietf.org/rfc/rfc4791.txt ) PATCH HTTP के लिए Method ( www.ietf.org/rfc/rfc5789.txt )

RFC3253
RFC3648
RFC3744
RFC4791
RFC5323
RFC5789

पब्लिक क्लास के तरीके

# File actionpack/lib/action_dispatch/http/request.rb, line 55
def self.empty
  new({})
end
# File actionpack/lib/action_dispatch/http/request.rb, line 59
def initialize(env)
  super
  @method            = nil
  @request_method    = nil
  @remote_ip         = nil
  @original_fullpath = nil
  @fullpath          = nil
  @ip                = nil
end
ActionDispatch::Http::URL.new विधि को कॉल करें ActionDispatch::Http::URL.new

सार्वजनिक प्रवृत्ति के तरीके

# File actionpack/lib/action_dispatch/http/request.rb, line 366
def GET
  fetch_header("action_dispatch.request.query_parameters") do |k|
    rack_query_params = super || {}
    # Check for non UTF-8 parameter values, which would cause errors later
    Request::Utils.check_param_encoding(rack_query_params)
    set_header k, Request::Utils.normalize_encode_params(rack_query_params)
  end
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
  raise ActionController::BadRequest.new("Invalid query parameters: #{e.message}")
end

उदासीन पहुँच का समर्थन करने के लिए रैक की #GET विधि को ओवरराइड करें।

सुपरक्लास विधि कहता है
इसके रूप में भी उपनाम: query_parameters
पोस्ट () स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/request.rb, line 379
def POST
  fetch_header("action_dispatch.request.request_parameters") do
    pr = parse_formatted_parameters(params_parsers) do |params|
      super || {}
    end
    self.request_parameters = Request::Utils.normalize_encode_params(pr)
  end
rescue Http::Parameters::ParseError # one of the parse strategies blew up
  self.request_parameters = Request::Utils.normalize_encode_params(super || {})
  raise
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
  raise ActionController::BadRequest.new("Invalid request parameters: #{e.message}")
end

उदासीन पहुँच का समर्थन करने के लिए रैक की #POST विधि को ओवरराइड करें।

सुपरक्लास विधि कहता है
इसके रूप में भी उपनाम: request_parameters
प्राधिकरण () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 396
def authorization
  get_header("HTTP_AUTHORIZATION")   ||
  get_header("X-HTTP_AUTHORIZATION") ||
  get_header("X_HTTP_AUTHORIZATION") ||
  get_header("REDIRECT_X_HTTP_AUTHORIZATION")
end

यह चाहे वह सीधे या किसी एक प्रॉक्सी विकल्प के माध्यम से निर्दिष्ट किया गया हो, प्राधिकरण शीर्ष लेख लौटाता है।

# File actionpack/lib/action_dispatch/http/request.rb, line 322
def body
  if raw_post = get_header("RAW_POST_DATA")
    raw_post = raw_post.dup.force_encoding(Encoding::BINARY)
    StringIO.new(raw_post)
  else
    body_stream
  end
end

अनुरोध निकाय एक IO इनपुट स्ट्रीम है। यदि RAW_POST_DATA परिवेश चर पहले से सेट है, तो उसे स्ट्रिंग में लपेटें।

प्रतिबद्ध_फ्लैश () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 417
def commit_flash
end
# File actionpack/lib/action_dispatch/http/request.rb, line 259
def content_length
  super.to_i
end

पूर्णांक के रूप में अनुरोध की सामग्री लंबाई लौटाता है।

सुपरक्लास विधि कहता है
नियंत्रक_क्लास () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 78
def controller_class
  params = path_parameters
  params[:action] ||= "index"
  controller_class_for(params[:controller])
end
नियंत्रक_class_for (नाम) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 84
def controller_class_for(name)
  if name
    controller_param = name.underscore
    const_name = "#{controller_param.camelize}Controller"
    ActiveSupport::Dependencies.constantize(const_name)
  else
    PASS_NOT_FOUND
  end
end
# File actionpack/lib/action_dispatch/http/request.rb, line 339
def form_data?
  FORM_DATA_MEDIA_TYPES.include?(media_type)
end

यह निर्धारित करें कि क्या अनुरोध बॉडी में मीडिया-प्रकारों में से किसी एक के लिए अनुरोध सामग्री-प्रकार की जाँच करके फ़ॉर्म-डेटा शामिल है: "एप्लिकेशन / x-www-form-urlencoded" या "मल्टीपार्ट / फॉर्म-डेटा"। प्रपत्र-डेटा मीडिया प्रकारों की सूची FORM_DATA_MEDIA_TYPES सरणी के माध्यम से संशोधित की जा सकती है।

जब कोई सामग्री-प्रकार हेडर प्रदान नहीं किया जाता है और #request_method #POST होता है, तो एक अनुरोध निकाय को फॉर्म-डेटा सम्‍मिलित नहीं किया जाता है।

# File actionpack/lib/action_dispatch/http/request.rb, line 238
def fullpath
  @fullpath ||= super
end

अनुरोध किए गए अंतिम URL के परमर्स सहित String पूर्ण पथ पर वापस लौटता है।

# get "/articles"
request.fullpath # => "/articles"

# get "/articles?page=2"
request.fullpath # => "/articles?page=2"
सुपरक्लास विधि कहता है
शीर्ष लेख () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 199
def headers
  @headers ||= Http::Headers.new(self)
end

उदाहरण के लिए अनुरोध के HTTP हेडर तक पहुँच प्रदान करता है:

request.headers["Content-Type"] # => "text/plain"
# File actionpack/lib/action_dispatch/http/request.rb, line 168
def http_auth_salt
  get_header "action_dispatch.http_auth_salt"
end
# File actionpack/lib/action_dispatch/http/request.rb, line 272
def ip
  @ip ||= super
end

String रूप में क्लाइंट का आईपी पता लौटाता है।

सुपरक्लास विधि कहता है
कुंजी? (कुंजी) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/request.rb, line 97
def key?(key)
  has_header? key
end

यदि अनुरोध में दिए गए मुख्य पैरामीटर से मेल खाता शीर्ष लेख है तो यह सही है।

request.key? :ip_spoofing_check # => true
स्थानीय? () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 404
def local?
  LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip
end

सच है अगर अनुरोध लोकलहोस्ट, 127.0.0.1, या :: 1 से आया है।

लकड़हारा () स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/request.rb, line 413
def logger
  get_header("action_dispatch.logger".freeze)
end
# File actionpack/lib/action_dispatch/http/request.rb, line 254
def media_type
  content_mime_type.to_s
end

String MIME अनुरोध का प्रकार।

# get "/articles"
request.media_type # => "application/x-www-form-urlencoded"
# File actionpack/lib/action_dispatch/http/request.rb, line 187
def method
  @method ||= check_method(get_header("rack.methodoverride.original_method") || get_header("REQUEST_METHOD"))
end

पर्यावरण के REQUEST_METHOD का मूल मान लौटाता है, भले ही यह मिडलवेयर द्वारा ओवरराइड किया गया हो। अधिक जानकारी के लिए #request_method देखें।

# File actionpack/lib/action_dispatch/http/request.rb, line 192
def method_symbol
  HTTP_METHOD_LOOKUP[method]
end

method का प्रतीक रूप देता है।

# File actionpack/lib/action_dispatch/http/request.rb, line 227
def original_fullpath
  @original_fullpath ||= (get_header("ORIGINAL_FULLPATH") || fullpath)
end

उनके अनुरोधों सहित अंतिम अनुरोधित पथ के साथ एक String लौटाता है।

# get '/foo'
request.original_fullpath # => '/foo'

# get '/foo?bar'
request.original_fullpath # => '/foo?bar'
# File actionpack/lib/action_dispatch/http/request.rb, line 246
def original_url
  base_url + original_fullpath
end

मूल अनुरोध URL को String रूप में लौटाता है।

# get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
query_parameters ()
इसके लिए उपनाम: #GET
कच्चे_पोस्ट () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 311
def raw_post
  unless has_header? "RAW_POST_DATA"
    raw_post_body = body
    set_header("RAW_POST_DATA", raw_post_body.read(content_length))
    raw_post_body.rewind if raw_post_body.respond_to?(:rewind)
  end
  get_header "RAW_POST_DATA"
end

अनुरोध निकाय पढ़ें। यह उन वेब सेवाओं के लिए उपयोगी है जिन्हें सीधे कच्चे अनुरोधों के साथ काम करने की आवश्यकता है।

# File actionpack/lib/action_dispatch/http/request.rb, line 278
def remote_ip
  @remote_ip ||= (get_header("action_dispatch.remote_ip") || ip).to_s
end

क्लाइंट का IP पता एक String रूप में देता है, जो आमतौर पर RemoteIp मिडलवेयर द्वारा सेट किया RemoteIp है।

Remote_ip = (Remote_ip) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 282
def remote_ip=(remote_ip)
  set_header "action_dispatch.remote_ip".freeze, remote_ip
end
# File actionpack/lib/action_dispatch/http/request.rb, line 294
def request_id
  get_header ACTION_DISPATCH_REQUEST_ID
end

अद्वितीय अनुरोध आईडी लौटाता है, जो या तो X-Request-Id हेडर पर आधारित है जो कि फ़ायरवॉल, लोड बैलेंसर या वेब सर्वर या RequestId मिडलवेयर (जो क्रिया_dispatch.request.id पर्यावरण चर सेट करता है) द्वारा उत्पन्न किया जा सकता है।

लॉगिंग या डीबगिंग के भाग के रूप में एंड-टू-एंड अनुरोध को ट्रेस करने के लिए यह अनन्य ID उपयोगी है। यह RequestId मिडलवेयर द्वारा निर्धारित रैक वैरिएबल पर निर्भर करता है।

इसके अलावा उपनाम: uuid
# File actionpack/lib/action_dispatch/http/request.rb, line 134
def request_method
  @request_method ||= check_method(super)
end

HTTP विधि लौटाता है जिसे एप्लिकेशन को देखना चाहिए। उस स्थिति में जहां विधि एक मिडलवेयर द्वारा ओवरराइड की गई थी (उदाहरण के लिए, यदि HEAD अनुरोध को #GET में बदल दिया गया था, या अगर _method पैरामीटर का उपयोग उस विधि को निर्धारित करने के लिए किया गया था जिसका उपयोग अनुप्रयोग करना चाहिए), तो यह विधि ओवरड्यूड मान लौटाती है, मूल नहीं।

सुपरक्लास विधि कहता है
request_method_symbol () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 180
def request_method_symbol
  HTTP_METHOD_LOOKUP[request_method]
end

एक प्रतीक फॉर्म का #request_method

request_parameters ()
इसके लिए उपनाम: #POST
request_parameters = (params) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 408
def request_parameters=(params)
  raise if params.nil?
  set_header("action_dispatch.request.request_parameters".freeze, params)
end
# File actionpack/lib/action_dispatch/http/request.rb, line 349
def reset_session
  if session && session.respond_to?(:destroy)
    session.destroy
  else
    self.session = {}
  end
end

TODO इसे AD :: अनुरोध :: सत्र में अलग किया जाना चाहिए और संभवतः सत्र मिडलवेयर द्वारा शामिल किया जाना चाहिए।

send_early_hints (लिंक) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 214
def send_early_hints(links)
  return unless env["rack.early_hints"]

  env["rack.early_hints"].call(links)
end

प्रारंभिक संकेत एक HTTP / 2 स्थिति कोड है जो क्लाइंट को अंतिम प्रतिक्रिया को संसाधित करने के लिए तैयारी शुरू करने में मदद करने के लिए संकेत को इंगित करता है।

यदि env में rack.early_hints तो सर्वर लिंक हेडर के लिए HTTP2 पुश स्वीकार करता है।

send_early_hints विधि लिंक के हैश को इस प्रकार स्वीकार करती है:

send_early_hints("Link" => "</style.css>; rel=preload; as=style\n</script.js>; rel=preload")

यदि आप javascript_include_tag या stylesheet_link_tag का उपयोग कर रहे हैं तो प्रारंभिक संकेत हेडर डिफ़ॉल्ट रूप से समर्थित होने पर शामिल किए जाते हैं।

# File actionpack/lib/action_dispatch/http/request.rb, line 305
def server_software
  (get_header("SERVER_SOFTWARE") && /^([a-zA-Z]+)/ =~ get_header("SERVER_SOFTWARE")) ? $1.downcase : nil
end

HTTP सर्वर सॉफ़्टवेयर का निचला नाम लौटाता है।

session_options = (विकल्प) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/request.rb, line 361
def session_options=(options)
  Session::Options.set self, options
end
# File actionpack/lib/action_dispatch/http/request.rb, line 420
def ssl?
  super || scheme == "wss".freeze
end
सुपरक्लास विधि कहता है
uuid ()
इसके लिए उपनाम: request_id
XHR? ()
इसके लिए उपनाम: xml_http_request?
# File actionpack/lib/action_dispatch/http/request.rb, line 266
def xml_http_request?
  get_header("HTTP_X_REQUESTED_WITH") =~ /XMLHttpRequest/i
end

यदि "X-Requested-With" हेडर में "XMLHttpRequest" (केस-असंवेदनशील) शामिल है, तो यह सही है कि जावास्क्रिप्ट लाइब्रेरी और फ्रेमवर्क की पसंद के आधार पर मैन्युअल रूप से जोड़े जाने की आवश्यकता हो सकती है।

इसके अलावा उपनाम: xhr?