Các tên miền phụ (tên miền) có thể có dấu gạch dưới _ _ trong đó không?


212

Tên miền phụ (tên miền) có thể có dấu gạch dưới _trong đó không?


12
Tôi đã đưa ra câu hỏi của bạn một cách xả rác: rằng bạn thực sự có nghĩa là TÊN MIỀN. Nếu, thay vào đó, bạn có nghĩa là GIỜ TÊN, hãy chỉnh sửa câu hỏi của bạn, vì câu trả lời sẽ khác nhau.
bortzmeyer

Câu trả lời:


362

Hầu hết các câu trả lời được đưa ra ở đây là sai . Hoàn toàn hợp pháp khi có dấu gạch dưới trong một tên miền. Hãy để tôi trích dẫn tiêu chuẩn, RFC 2181, phần 11, "Cú pháp tên" :

Bản thân DNS chỉ đặt một hạn chế trên các nhãn cụ thể có thể được sử dụng để xác định các bản ghi tài nguyên. Đó là một hạn chế liên quan đến chiều dài của nhãn và tên đầy đủ. [...] Việc triển khai các giao thức DNS không được đặt bất kỳ hạn chế nào đối với các nhãn có thể được sử dụng. Cụ thể, các máy chủ DNS không được từ chối phục vụ một vùng vì nó chứa các nhãn có thể không được chấp nhận đối với một số chương trình máy khách DNS.

Xem thêm thông số kỹ thuật DNS gốc, RFC 1034 , phần 3.5 "Cú pháp tên ưa thích" nhưng đọc kỹ.

Tên miền với dấu gạch dưới là rất phổ biến trong tự nhiên. Kiểm tra _jabber._tcp.gmail.comhoặc _sip._udp.apnic.net.

RFC khác được đề cập ở đây đối phó với những điều khác nhau. Câu hỏi ban đầu là về tên miền . Nếu câu hỏi dành cho tên máy chủ (hoặc cho URL, bao gồm tên máy chủ), thì câu hỏi này khác, tiêu chuẩn có liên quan là RFC 1123 , phần 2.1 "Tên và số máy chủ " giới hạn tên máy chủ thành chữ cái-chữ số.


73
+1 cho sự khác biệt giữa "tên miền" và "tên máy chủ"
Alnitak

3
Câu hỏi (trừ khi nó được chỉnh sửa) là về tên miền phụ tức là. tên máy chủ. Bạn không sai về các tuyên bố thực tế của mình, ngoại trừ chỉ ra rằng các câu trả lời là sai, dựa trên cách câu hỏi hiện được diễn đạt.
redreinard

4
Tôi bối rối, 1034 nói rằng "Các nhãn phải tuân theo các quy tắc cho tên máy chủ ARPANET. Chúng phải bắt đầu bằng một chữ cái, kết thúc bằng một chữ cái hoặc chữ số và có các ký tự bên trong chỉ có các chữ cái, chữ số và dấu gạch nối." Phần nào cho phép gạch dưới?
claudekennilol

2
Các từ ngữ là khó hiểu. URL không thể có dấu gạch dưới. URL luôn là FQDN, nó không phải là tên máy chủ. Một FQDN có thể có một tên máy chủ trống, trong trường hợp này là FQDN = domain. _jabber._tcp.gmail.comkhông phải là một miền, nó là một FQDN. Vì các URL không thể có dấu gạch dưới trong chúng, có lẽ bạn sẽ không bao giờ có thể mua tên miền có dấu gạch dưới trong đó. Vì vậy, ngay cả các tên miền tho cũng có thể có dấu gạch dưới từ quan điểm cú pháp DNS, bạn sẽ không bao giờ gặp phải bất kỳ trường hợp nào, trừ khi đó là tên miền cục bộ.
Viên nang

1
Tôi không thể xem trích dẫn trong 2.1 của rfc1123 đề cập đến bất cứ điều gì về dấu gạch nối được cho phép. Tôi có thể thấy trong rfc952 rằng một tên có thể là <let-or-Digit-or-hyphen>. Có phải đó là những gì bạn đã đề cập đến?
AJP

93

Một lưu ý về thuật ngữ, ngoài câu trả lời của Bortzmeyer

Người ta phải rõ ràng về định nghĩa. Như được sử dụng ở đây:

  • tên miềnđịnh danh của tài nguyên trong cơ sở dữ liệu DNS
  • nhãnmột phần của một tên miền ở giữa các dấu chấm
  • tên máy chủ là một loại tên miền đặc biệt xác định máy chủ Internet

Tên máy chủ phải tuân theo các hạn chế của RFC 952thư giãn nhẹ của RFC 1123

RFC 2181 làm rõ rằng có một sự khác biệt giữa tên miền và tên máy chủ:

... [thực tế là] bất kỳ nhãn nhị phân nào cũng có thể có bản ghi MX không ngụ ý rằng bất kỳ tên nhị phân nào cũng có thể được sử dụng làm phần lưu trữ của địa chỉ email ...

Vì vậy, dấu gạch dưới trong tên máy chủ là không có, dấu gạch dưới trong tên miền là a-ok.

Trong thực tế, người ta cũng có thể thấy tên máy chủ với dấu gạch dưới. Như Nguyên tắc mạnh mẽ nói: "Hãy thận trọng trong những gì bạn gửi, tự do trong những gì bạn chấp nhận".

Một lưu ý về mã hóa

Trong thế kỷ 21, hóa ra tên máy chủ cũng như tên miền có thể được quốc tế hóa! Điều này có nghĩa là dùng đến mã hóa trong trường hợp nhãn chứa các ký tự nằm ngoài bộ được phép.

Đặc biệt, nó cho phép một để mã hóa _trong hostname (Cập nhật 2017-07:. Đây là nghi ngờ, xem bình luận _.. Vẫn không thể được sử dụng trong các hostname Trên thực tế, nó có thể thậm chí không được sử dụng trong nhãn quốc tế)

RFC đầu tiên cho quốc tế hóa là RFC 3490 tháng 3 năm 2003, "Quốc tế hóa tên miền trong ứng dụng (IDNA)". Hôm nay chúng tôi có:

  • RFC 5890 "IDNA: Định nghĩa và khung tài liệu"
  • RFC 5891 "IDNA: Giao thức"
  • RFC 5892 "Điểm mã Unicode và IDNA"
  • RFC 5893 "Tập lệnh từ phải sang trái cho IDNA"
  • RFC 5894 "IDNA: Bối cảnh, Giải thích và Cơ sở lý luận"
  • RFC 5895 "Ký tự ánh xạ cho IDNA 2008"

Bạn cũng có thể muốn kiểm tra mục Wikipedia

RFC 5890 giới thiệu nhãn LDH (Letter-Digit-Hypen) cho các nhãn được sử dụng trong tên máy chủ và nói:

Đây là hình thức nhãn cổ điển được sử dụng, mặc dù có một số hạn chế bổ sung, trong tên máy chủ (RFC 952). Cú pháp của nó giống hệt với cú pháp được mô tả là "cú pháp tên ưa thích" trong Phần 3.5 của RFC 1034 như được sửa đổi bởi RFC 1123. Tóm lại, đó là một chuỗi bao gồm các chữ cái, chữ số ASCII và dấu gạch nối với hạn chế thêm rằng dấu gạch nối không thể xuất hiện ở đầu hoặc cuối chuỗi. Giống như tất cả các nhãn DNS, tổng chiều dài của nó không được vượt quá 63 octet.

Quay trở lại thời kỳ đơn giản hơn, dự thảo Internet này là một đề xuất sớm cho quốc tế hóa tên máy chủ . Tên máy chủ có ký tự quốc tế có thể được mã hóa bằng cách sử dụng, ví dụ: mã hóa 'RACE' .

Tác giả của ghi chú đề xuất 'mã hóa RACE':

Theo RFC 1035, các bộ phận máy chủ phải không phân biệt chữ hoa chữ thường, bắt đầu và kết thúc bằng một chữ cái hoặc chữ số và chỉ chứa các chữ cái, chữ số và ký tự gạch nối ("-"). Điều này, tất nhiên, không bao gồm bất kỳ nhân vật quốc tế hóa, cũng như nhiều nhân vật khác trong tiết mục nhân vật ASCII. Hơn nữa, các phần tên miền phải có độ dài 63 octet hoặc ngắn hơn .... Tất cả các phần tên được chuyển đổi có chứa các ký tự được quốc tế hóa bắt đầu bằng chuỗi "bq--". (...) Chuỗi "bq--" đã được chọn vì nó cực kỳ khó tồn tại trong các phần máy chủ trước khi thông số kỹ thuật này được sản xuất.


Bên cạnh đó, "Các hệ thống như DomainKeys và bản ghi dịch vụ sử dụng dấu gạch dưới làm phương tiện để đảm bảo rằng ký tự đặc biệt của chúng không bị nhầm lẫn với tên máy chủ. Ví dụ: _http._sctp.www.example.com chỉ định một con trỏ dịch vụ cho SCTP máy chủ webserver có khả năng (www) trong ví dụ miền.com. " ( liên kết )
x-yuri

Bỏ qua các phần mã hóa RACE, IDN đã thiết lập chuyển đổi ký tự nội bộ thành ASCII bằng cách sử dụng tiền tố 'xn--'.
mootmoot

2
@ Nelda.techspiress Đó là một thời gian nhưng theo RFC 1034: Tên miền - Các khái niệm và thiết bị , những gì được gọi là "tên miền phụ" của một miền bar.baz.(ví dụ) chỉ là tập hợp các tên miền được phân cấp bên dưới bar.baz., ví dụ như a.bar.baz., f.g.bar.baz., h.bar.baz., v.v ... "tên miền phụ" này có thể có hoặc không bao gồm tên máy chủ thực tế .
David Tonhofer

2
Trong sử dụng hàng ngày, người ta có thể có xu hướng gọi không chính xác chuỗi a.bar.baz(tên miền) "tên miền phụ của" chuỗi bar.baz(tên miền khác). Tên miền (tài nguyên cơ sở dữ liệu DNS) a.bar.bazbar.bazcó thể hoặc không thể là tên máy chủ .
David Tonhofer

1
Trên trang 8 của RFC 1034 , chúng tôi đọc: Một tên miền được xác định bởi một tên miền và bao gồm một phần của không gian tên miền nằm ở hoặc bên dưới tên miền chỉ định tên miền. Một miền là một tên miền phụ của một tên miền khác nếu nó được chứa trong tên miền đó. Mối quan hệ này có thể được kiểm tra bằng cách xem tên của tên miền phụ kết thúc bằng tên miền chứa. Ví dụ: ABCD là tên miền phụ của BCD, CD, D và "".
David Tonhofer

47

Có một điều nữa bạn có thể cần biết: Nếu máy chủ hoặc phần tên miền phụ của url chứa dấu gạch dưới, IE9 (chưa thử nghiệm các phiên bản khác) không thể viết cookie.

Vì vậy, hãy cẩn thận về điều đó. :-)



3
Chúng tôi chỉ có điều đó trong một dự án - và tôi sắp phát điên về các vấn đề IE kỳ lạ ở đó. Cho đến khi chúng tôi phát hiện ra dấu gạch dưới trong tên miền phụ. ; o)
Kai Myme

3
Vẫn là một vấn đề trong IE10. MS có biết về điều này không?
Piotr Kula

15
Liên quan hơn: MS có quan tâm đến điều này?
Ajax


11

Làm rõ bortzmeyerDavid Tonhofer , nhãn tên miền và tên miền phụ có thể chứa dấu gạch dưới hàng đầu, nhưng không ở đâu khác.

Như David Tonhofer đã viết, các nhãn là các phần giữa các giai đoạn và phải tuân theo quy tắc LDH trừ khi chỉ định nhãn dịch vụ và nhãn cổng để phân biệt chúng với nhãn thông thường. Sau đó, chúng phải xuất hiện ở đầu nhãn phải là "Tên ngắn" từ Đăng ký tên dịch vụ và số cổng, số cổng không có số 0 đứng đầu hoặc giao thức (ví dụ: tcp, udp). Các nhãn dịch vụ này được giới hạn hơn nữa trong 15 ký tự.

  • RFC2782 chỉ định các tên miền phụ bản ghi dịch vụ tiền tố với dấu gạch dưới.
  • RFC6698 chỉ định số cổng tiền tố với dấu gạch dưới trong hồ sơ chứng chỉ TLSA.

Trái với câu trả lời của David Tonhofer , IDN không cho phép mã hóa dấu gạch dưới ('_' U + 005F Low LINE) hoặc bất kỳ ký tự ASCII không hợp lệ nào khác.

Từ RFC5890

[..] hai tập hợp con mới của nhãn LDH được tạo bằng cách giới thiệu IDNA. Chúng được gọi là nhãn LDH dành riêng (nhãn R-LDH) và nhãn LDH không dành riêng (nhãn NR-LDH). Các nhãn LDH dành riêng, được gọi là "tên miền được gắn thẻ" trong một số ngữ cảnh khác, có thuộc tính chứa "-" trong các ký tự thứ ba và thứ tư nhưng theo quy tắc khác của nhãn LDH .

Punycode mã hóa tất cả các điểm mã ASCII dưới dạng ASCII trực tiếp, bao gồm cả dấu gạch dưới. Kết quả R-LDH sẽ không tuân thủ các quy tắc nhãn LDH. Ví dụ, Σ_.comsẽ được mã hóa khi xn--_-zmb.comvi phạm các quy tắc. Có thể có một loại tiền mã hóa đồng nhất trông giống như một dấu gạch dưới có thể được mã hóa một cách hợp pháp (có lẽ là dòng thấp băng thông đầy đủ U + FF3F), nhưng các loại tiền mã hóa này sẽ được phân loại là DISALLOWED bởi RFC5892 theo 2.3.

RACE (sơ đồ mã hóa IDN được đề xuất khác) không được IETF chấp nhận làm tiêu chuẩn và không nên được sử dụng.


1
Cuối cùng. Không thể tin rằng đây là bài viết duy nhất trong toàn bộ trang thậm chí nói về Punycode.
Pacerier

6

Tôi đã theo liên kết đến RFC1034 và đọc hầu hết trong số đó và rất ngạc nhiên khi thấy điều này:

Các nhãn phải tuân theo các quy tắc cho tên máy chủ ARPANET. Họ phải bắt đầu bằng một chữ cái, kết thúc bằng một chữ cái hoặc chữ số và có các ký tự bên trong chỉ có các chữ cái, chữ số và dấu gạch nối. Cũng có một số hạn chế về chiều dài. Nhãn phải có 63 ký tự trở xuống.

Để làm rõ, một tên miền được tạo thành từ các nhãn được phân tách bằng dấu chấm ".". Thông số kỹ thuật này phải lỗi thời vì nó không đề cập đến việc sử dụng dấu gạch dưới. Tôi có thể hiểu được sự nhầm lẫn nếu có ai vấp phải thông số này mà không biết nó đã lỗi thời. Nó đã lỗi thời, phải không?

Tôi đã theo liên kết đến RFC2181 và đọc một số. Đặc biệt là nơi nó liên quan đến vấn đề tên có thẩm quyền, hoặc chính tắc, và vấn đề gì tạo ra nhãn DNS hợp lệ.

Như đã đăng trước đó, nó chỉ có một hạn chế về độ dài sau đó để tóm tắt nó đọc:

(về tên và nhãn hợp lệ)

Chúng đã được chỉ định đầy đủ, tuy nhiên các thông số kỹ thuật dường như đôi khi bị bỏ qua. Chúng tôi tìm cách củng cố các thông số kỹ thuật hiện có.

Loại lá khiến tôi tự hỏi liệu "hạn chế chỉ một chiều dài" là "đầy đủ". Chúng ta sẽ bắt đầu thấy các tên miền như @ # $% !! Sớm? Internet không đủ mạnh?


3
Không, nó không lỗi thời. RFC1034 là một đặc tả về tên máy chủ , trường hợp đặc biệt của tên miền , là định danh chung của tài nguyên trong cơ sở dữ liệu DNS. Ví dụ: phần "máy chủ" của URI được định nghĩa khá thoải mái ( tools.ietf.org/html/rfc3986#section-3.2.2 ) nhưng RFC cảnh báo: "Máy chủ được xác định bởi tên đã đăng ký thường là một chuỗi các ký tự nhằm mục đích tra cứu trong máy chủ lưu trữ hoặc tên dịch vụ được xác định cục bộ ... tên đã đăng ký nhằm tìm kiếm trong DNS sử dụng cú pháp được xác định trong Mục 3.5 của [RFC1034] và Mục 2.1 của [RFC1123]. "
David Tonhofer

3

Gần đây, diễn đàn CAB (*) đã quyết định rằng

Tất cả các chứng chỉ có chứa ký tự gạch dưới trong bất kỳ mục nhập dNSName nào và có thời hạn hiệu lực hơn 30 ngày PHẢI bị thu hồi trước ngày 15 tháng 1 năm 2019. https://cabforum.org/2018/11/12/ballot-sc-12- hoàng hôn của những kẻ dưới đáy biển /

Điều này có nghĩa là bạn không còn được phép sử dụng dấu gạch dưới trong các tên miền sẽ có chứng chỉ ssl / tls.

(*) Diễn đàn Trình duyệt Chứng nhận (CA / Diễn đàn Trình duyệt) là sự tập hợp tự nguyện của Nhà phát hành Chứng chỉ hàng đầu (như được định nghĩa trong Mục 2.1 (a) (1) và (2) bên dưới) và các nhà cung cấp phần mềm trình duyệt Internet và các ứng dụng khác sử dụng chứng chỉ (Người tiêu dùng chứng chỉ, như được định nghĩa trong Mục 2.1 (a) (3) bên dưới).


1

Các TLD riêng lẻ có thể đặt các quy tắc và hạn chế của riêng họ đối với các tên miền mà họ thấy phù hợp, chẳng hạn như để chứa các ngôn ngữ địa phương.

Ví dụ: theo CIRA , .catên miền của Canada được cho phép:

  • Chữ athông qua z, và các ký tự có dấu sau đây : é ë ê è â à æ ô œ ù û ü ç î ï ÿ. Lưu ý rằng Tên miền không phân biệt chữ hoa chữ thường. Điều này có nghĩa là sẽ không có sự phân biệt giữa chữ in hoa và chữ thường ( A= a);

  • Những con số 0123456789

  • Ký tự gạch nối (" -) (mặc dù nó không thể được sử dụng để bắt đầu hoặc kết thúc Tên miền).

Độ dài tối đa là 63 ký tự, ngoại trừ mỗi ký tự có dấu làm giảm giới hạn đó xuống 4 ký tự.

( Nguồn )


Ngẫu nhiên, điều này cho phép có khoảng 4 khả năng tên miền Quadragintillion (không tính tên miền phụ) cho tên miền dot-ca.


0

Đây là 2 xu của tôi từ thế giới Java:

Từ bảng điều khiển Spark Scala, với Java 8:

scala> new java.net.URI("spark://spark_master").getHost
res10: String = null

scala> new java.net.URI("spark://spark-master").getHost
res11: String = spark-master

scala> new java.net.URI("spark://spark_master.google.fr").getHost
res12: String = null

scala> new java.net.URI("spark://spark.master.google.fr").getHost
res13: String = spark.master.google.fr

scala> new java.net.URI("spark://spark-master.google.fr:3434").getHost
res14: String = spark-master.google.fr

scala> new java.net.URI("spark://spark-master.goo_gle.fr:3434").getHost
res15: String = null

Đó chắc chắn là một ý tưởng tồi ^^


0

Chỉ cần tạo dự án cục bộ (với vagrant) và nó đã hoạt động hoàn hảo khi được truy cập qua địa chỉ IP. Sau đó, tôi đã thêm some_name.test vào tệp lưu trữ và thử truy cập theo cách đó, nhưng tôi đã nhận được "yêu cầu xấu - 400" mọi lúc. Đã lãng phí hàng giờ cho đến khi tôi nhận ra rằng chỉ cần thay đổi tên miền thành some-name.test sẽ giải quyết vấn đề. Vì vậy, ít nhất là cục bộ trên Mac OS, nó không hoạt động.


0

Không, bạn không thể sử dụng dấu gạch dưới trong tên miền phụ nhưng hypen (dấu gạch ngang). tức là my-subdomain.agahost.com có ​​thể chấp nhận được và my_subdomain.agahost.com sẽ không được chấp nhận.


-2

Không, nếu bạn muốn nó giải quyết trên Internet.

Bạn không thể có: http://my_subdomain.example.com không hợp lệ.

Bạn có thể có: http://my-subdomain.example.com với dấu gạch nối.


Đó là sau ngày 15 tháng 1 năm 2019 - ví dụ truy cập của bạn không hoạt động.
Joe Inwap

@JoeInwap Bạn có thể vui lòng chỉ cho tôi một nguồn cho nhận xét của bạn không?
ankshah

Tôi đã đi bằng cabforum.org/2018/11/12/ và thực tế là o_o.lgms.nl xuất trình chứng chỉ không hợp lệ cho tên máy chủ đó. Tên, tuy nhiên, giải quyết.
Joe Inwap
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.