Làm cách nào để phân biệt máy chủ và cổng trong URL IPv6?


87

URL luôn có định dạng này:

<protocol>://<host>[:<port>]/[<path>][#<hash>]

Vấn đề là IPv6 sử dụng dấu hai chấm, giống như dấu phân cách của cổng và máy chủ, ví dụ:

2001:db8:1f70::999:de8:7648:6e8

Nhưng nếu đây là máy chủ lưu trữ và tôi muốn kết nối với HTTP bằng cổng 100 thì sao?

http://2001:db8:1f70::999:de8:7648:6e8:100/

Vấn đề là đại tràng cuối cùng. Vì số 0 được bỏ qua với dấu hai chấm (trong khoảng từ 1f70 đến 999), nên không biết ': 100' thuộc về IP hay số cổng. Làm thế nào chúng ta có thể biết điều này?

Câu trả lời:


118

Ký hiệu trong trường hợp đó là mã hóa số IP IPv6 trong ngoặc vuông:

http://[2001:db8:1f70::999:de8:7648:6e8]:100/

Đó là RFC 3986 , phần 3.2.2: Máy chủ

Một máy chủ được xác định bởi một địa chỉ bằng chữ của Giao thức Internet, phiên bản 6 [RFC3513] trở lên, được phân biệt bằng cách đặt chữ IP trong dấu ngoặc vuông ("[" và "]"). Đây là nơi duy nhất cho phép các ký tự dấu ngoặc vuông trong cú pháp URI. Để dự đoán trong tương lai, các định dạng địa chỉ IP bằng chữ chưa được xác định, việc triển khai có thể sử dụng cờ phiên bản tùy chọn để chỉ rõ định dạng như vậy thay vì dựa vào xác định heuristic.


38
Thật đáng để chỉ ra rằng dấu ngoặc không phải là tùy chọn. Đây là cơ chế rõ ràng duy nhất mà trình duyệt có thể xác định địa chỉ IPv6 số.
tylerl

Không phải cổng nằm trong dấu ngoặc?
jayarjo

2
@jayarjo Không, vì các dấu ngoặc ở đó để cung cấp sự phân định giữa địa chỉ IP chứa dấu hai chấm và cổng được phân tách khỏi địa chỉ IP bằng dấu hai chấm.
sysadmin1138
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.