codecov-io: ## [Current coverage](https://codecov.io/gh/falconry/falcon/pull/909?src=pr) is 100% (diff: 100%)
> Merging [#909](https://codecov.io/gh/falconry/falcon/pull/909?src=pr) into [master](https://codecov.io/gh/falconry/falcon/branch/master?src=pr) will not change coverage

```diff
@@           master   #909   diff @@
====================================
  Files          31     31          
  Lines        1969   1970     +1   
  Methods         0      0          
  Messages        0      0          
  Branches      320    320          
====================================
+ Hits         1969   1970     +1   
  Misses          0      0          
  Partials        0      0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last update [67d6102...bd67690](https://codecov.io/gh/falconry/falcon/compare/67d61029847cbf59e4053c8a424df4f9f87ad36f...bd6769013acdb0cb864dddeef8c65bac200ad089?src=pr)
diff --git a/falcon/response.py b/falcon/response.py
index 6e73436..eabced5 100644
--- a/falcon/response.py
+++ b/falcon/response.py
@@ -625,6 +625,24 @@ class Response(object):
         """,
         lambda v: ', '.join(v))
 
+    accept_ranges = header_property(
+        'Accept-Ranges',
+        """Sets the Accept-Ranges header.
+
+        The Accept-Ranges header field indicates to the client which
+        range units are supported (e.g. "bytes") for the target
+        resource.
+
+        If range requests are not supported for the target resource,
+        the header may be set to "none" to advise the client not to
+        attempt any such requests.
+
+        Note:
+            "none" is the literal string, not Python's built-in ``None``
+            type.
+
+        """)
+
     def _encode_header(self, name, value, py2=PY2):
         if py2:
             if isinstance(name, unicode):

Add support to Response for the Accept-Ranges header
Should be fairly straightforward (see also: https://tools.ietf.org/html/rfc7233#section-2.3)
diff --git a/tests/test_headers.py b/tests/test_headers.py
index 3244f22..387690f 100644
--- a/tests/test_headers.py
+++ b/tests/test_headers.py
@@ -50,6 +50,8 @@ class HeaderHelpersResource(object):
         else:
             resp.content_range = (0, 25, 100, req.range_unit)
 
+        resp.accept_ranges = 'bytes'
+
         self.resp = resp
 
     def on_head(self, req, resp):
@@ -322,6 +324,9 @@ class TestHeaders(testing.TestCase):
         resp.content_range = (1, 499, 10 * 1024, 'bytes')
         self.assertEqual(resp.content_range, 'bytes 1-499/10240')
 
+        self.assertEqual(resp.accept_ranges, 'bytes')
+        self.assertEqual(result.headers['Accept-Ranges'], 'bytes')
+
         req_headers = {'Range': 'items=0-25'}
         result = self.simulate_get(headers=req_headers)
         self.assertEqual(result.headers['Content-Range'], 'items 0-25/100')

pip install -e .
parse_log_pytest
requirements.txt
pytest ddt pytest-randomly pytest-cov pytest-xdist
apt-get update apt-get install -y gcc
3.5
tools/test-requires
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
coverage==6.2
ddt==1.7.2
execnet==1.9.0
-e git+https://github.com/falconry/falcon.git@67d61029847cbf59e4053c8a424df4f9f87ad36f#egg=falcon
fixtures==4.0.1
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
pbr==6.1.1
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
pytest-randomly==3.10.3
pytest-xdist==3.0.2
python-mimeparse==1.6.0
PyYAML==6.0.1
requests==2.27.1
six==1.17.0
testtools==2.6.0
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: falcon
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - coverage==6.2
      - ddt==1.7.2
      - execnet==1.9.0
      - fixtures==4.0.1
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pbr==6.1.1
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-randomly==3.10.3
      - pytest-xdist==3.0.2
      - python-mimeparse==1.6.0
      - pyyaml==6.0.1
      - requests==2.27.1
      - six==1.17.0
      - testtools==2.6.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/falcon

tests/test_headers.py::TestHeaders::test_response_header_helpers_on_get
tests/test_headers.py::TestHeaders::test_add_link_with_title tests/test_headers.py::TestHeaders::test_add_link_with_hreflang_multi tests/test_headers.py::TestHeaders::test_unicode_headers tests/test_headers.py::TestHeaders::test_required_header tests/test_headers.py::TestHeaders::test_content_length tests/test_headers.py::TestHeaders::test_add_link_complex tests/test_headers.py::TestHeaders::test_custom_content_type tests/test_headers.py::TestHeaders::test_vary_header_2____accept_encoding____x_auth_token_____accept_encoding__x_auth_token__ tests/test_headers.py::TestHeaders::test_headers_as_list tests/test_headers.py::TestHeaders::test_override_default_media_type_missing_encoding tests/test_headers.py::TestHeaders::test_add_link_single tests/test_headers.py::TestHeaders::test_add_link_with_hreflang tests/test_headers.py::TestHeaders::test_unicode_location_headers tests/test_headers.py::TestHeaders::test_no_content_length_1_204_No_Content tests/test_headers.py::TestHeaders::test_passthrough_request_headers tests/test_headers.py::TestHeaders::test_content_type_no_body tests/test_headers.py::TestHeaders::test_vary_star tests/test_headers.py::TestHeaders::test_response_set_and_get_header tests/test_headers.py::TestHeaders::test_default_media_type tests/test_headers.py::TestHeaders::test_content_header_missing tests/test_headers.py::TestHeaders::test_add_link_with_title_star tests/test_headers.py::TestHeaders::test_no_content_type_2_304_Not_Modified tests/test_headers.py::TestHeaders::test_content_length_options tests/test_headers.py::TestHeaders::test_vary_header_3____accept_encoding____x_auth_token_____accept_encoding__x_auth_token__ tests/test_headers.py::TestHeaders::test_override_default_media_type_1___text_plain__charset_UTF_8____Hello_Unicode_____ tests/test_headers.py::TestHeaders::test_default_value tests/test_headers.py::TestHeaders::test_override_default_media_type_2___text_plain____Hello_ISO_8859_1___ tests/test_headers.py::TestHeaders::test_add_link_with_type_hint tests/test_headers.py::TestHeaders::test_add_link_multiple tests/test_headers.py::TestHeaders::test_response_append_header tests/test_headers.py::TestHeaders::test_vary_header_1____accept_encoding_____accept_encoding__ tests/test_headers.py::TestHeaders::test_add_link_with_anchor tests/test_headers.py::TestHeaders::test_no_content_type_1_204_No_Content tests/test_headers.py::TestHeaders::test_no_content_length_2_304_Not_Modified
falcon/response.py
falcon/response.py